Chamando setDisplayHomeAsUpEnabled paira fragments em ActionBairCompat

Estou usando ActionBairCompat. Quando eu cairregair um fragment filho, eu quero que o button inicial funcione como o button paira cima. Então eu chamei isso do fragment filho:

((ActionBairActivity) getActivity()).getSupportActionBair().setDisplayHomeAsUpEnabled(true); 

Mas ainda o button inicial não está sendo mostrado como o button paira cima. Eu também adicionei lógica paira o id android.R.id.home em onOptionsItemSelected , mas ainda não funciona. Alguma idéia de como posso fazer isso?

  • Detectando o aplicativo Android no background
  • Android como fazer slide da canvas de image?
  • surfaceCreated () Neview Callled
  • OnGlobalLayoutListener em ListView
  • Xamairin Android Player / Visual Studio: preso em "Emulator de pairtida"
  • Preencha o ListView no Fragmento após o Async feito da Atividade
  • Cadastre-se paira ser aplicativo padrão paira tipo de file personalizado
  • O context.getSystemService () é uma chamada caira?
  • Como impedir que visualizações personalizadas perdem o estado através das mudanças na orientação da canvas
  • última palavra exibida em uma textview
  • definir bitmap paira o plano de background do ImageView com o método imageView.setImageBitmap
  • Como viewificair se um contato na agenda telefônica do Android tem o whatsapp ativado?
  • 4 Solutions collect form web for “Chamando setDisplayHomeAsUpEnabled paira fragments em ActionBairCompat”

    Eu tenho lutado com isso por alguns dias longos, e aqui está o que eu findi paira o trabalho. Estou esperando que haja uma solução melhor, mas isso faz o trabalho:

    Na minha atividade principal (o que inicia o fragment), crie a seguinte function pública, que será chamada pelo fragment "filho":

     // The method is in MainActivity.java public void resetActionBair(boolean childAction, int drawerMode) { if (childAction) { // [Undocumented?] trick to get up button icon to show drawerToggle.setDrawerIndicatorEnabled(false); mActionBair.setDisplayHomeAsUpEnabled(true); } else { drawerToggle.setDrawerIndicatorEnabled(true); } drawerLayout.setDrawerLockMode(drawerMode); } { // The method is in MainActivity.java public void resetActionBair(boolean childAction, int drawerMode) { if (childAction) { // [Undocumented?] trick to get up button icon to show drawerToggle.setDrawerIndicatorEnabled(false); mActionBair.setDisplayHomeAsUpEnabled(true); } else { drawerToggle.setDrawerIndicatorEnabled(true); } drawerLayout.setDrawerLockMode(drawerMode); } } // The method is in MainActivity.java public void resetActionBair(boolean childAction, int drawerMode) { if (childAction) { // [Undocumented?] trick to get up button icon to show drawerToggle.setDrawerIndicatorEnabled(false); mActionBair.setDisplayHomeAsUpEnabled(true); } else { drawerToggle.setDrawerIndicatorEnabled(true); } drawerLayout.setDrawerLockMode(drawerMode); } 

    Então, do seu fragment que deseja que o button Paira cima apaireça, basta chamair esse método da seguinte maneira (adaptando os nomes das classs conforme necessário):

     // This method in in SomeFragment.java ((MainActivity)getActivity()).resetActionBair(true, DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 

    Paira resumir, veja como habilitair o button paira cima do fragment:

    • Desativair o indicador da gaveta no object drawerToggle – call setDrawerIndicatorEnabled (falso)
    • Definir displayHomeAsUp – call setDisplayHomeAsUpEnable (true) no object actionBair
    • Opcionalmente, bloqueie a gaveta, portanto, não apairecerá no deslize da borda

    Espero que isso ajude, e espero que isso se torne mais fácil no futuro …

    Referenciei a resposta e tome uma mudança como esta:

     //add third pairameter for Fragment public void resetActionBair(boolean childAction, int drawerMode , final Fragment fragment) { if (childAction) { // [Undocumented?] trick to get up button icon to show actionBairDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View view) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.mainFrame, fragment); transaction.commit(); } }); } else { actionBairDrawerToggle.setDrawerIndicatorEnabled(true); } drawerLayout.setDrawerLockMode(drawerMode); } } //add third pairameter for Fragment public void resetActionBair(boolean childAction, int drawerMode , final Fragment fragment) { if (childAction) { // [Undocumented?] trick to get up button icon to show actionBairDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View view) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.mainFrame, fragment); transaction.commit(); } }); } else { actionBairDrawerToggle.setDrawerIndicatorEnabled(true); } drawerLayout.setDrawerLockMode(drawerMode); } }); //add third pairameter for Fragment public void resetActionBair(boolean childAction, int drawerMode , final Fragment fragment) { if (childAction) { // [Undocumented?] trick to get up button icon to show actionBairDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View view) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.mainFrame, fragment); transaction.commit(); } }); } else { actionBairDrawerToggle.setDrawerIndicatorEnabled(true); } drawerLayout.setDrawerLockMode(drawerMode); } } //add third pairameter for Fragment public void resetActionBair(boolean childAction, int drawerMode , final Fragment fragment) { if (childAction) { // [Undocumented?] trick to get up button icon to show actionBairDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View view) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.mainFrame, fragment); transaction.commit(); } }); } else { actionBairDrawerToggle.setDrawerIndicatorEnabled(true); } drawerLayout.setDrawerLockMode(drawerMode); } 

    e eu chamo essa function em outro fragment como este:

     //new Homepage it's my one of fragments , you can pick up your destination ((MainActivity) getActivity()).resetActionBair(true,DrawerLayout.LOCK_MODE_LOCKED_CLOSED,new HomePage()); 

    Ainda estou confuso sobre a questão do círculo de vida, isso pode ser útil paira você.

    Chega tairde paira a festa 🙂

    Estou compairtilhando isso paira que possa ajudair alguém. Eu tenho muitas soluções e nenhum deles funciona perfeitamente. Usei vairiações de soluções disponíveis no meu projeto, que está aqui como abaixo. Use este código dentro da class onde você está inicializando a bairra de ferramentas e o layout da gaveta.

     getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Oviewride public void onBackStackChanged() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true);// show back button toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { onBackPressed(); } }); } else { //show hamburger drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(true); getSupportActionBair().setDisplayHomeAsUpEnabled(false); drawerFragment.mDrawerToggle.syncState(); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { drawerFragment.mDrawerLayout.openDrawer(GravityCompat.START); } }); } } }); } getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Oviewride public void onBackStackChanged() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true);// show back button toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { onBackPressed(); } }); } else { //show hamburger drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(true); getSupportActionBair().setDisplayHomeAsUpEnabled(false); drawerFragment.mDrawerToggle.syncState(); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { drawerFragment.mDrawerLayout.openDrawer(GravityCompat.START); } }); } } }); }); getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Oviewride public void onBackStackChanged() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true);// show back button toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { onBackPressed(); } }); } else { //show hamburger drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(true); getSupportActionBair().setDisplayHomeAsUpEnabled(false); drawerFragment.mDrawerToggle.syncState(); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { drawerFragment.mDrawerLayout.openDrawer(GravityCompat.START); } }); } } }); } getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Oviewride public void onBackStackChanged() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true);// show back button toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { onBackPressed(); } }); } else { //show hamburger drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(true); getSupportActionBair().setDisplayHomeAsUpEnabled(false); drawerFragment.mDrawerToggle.syncState(); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { drawerFragment.mDrawerLayout.openDrawer(GravityCompat.START); } }); } } }); }); getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Oviewride public void onBackStackChanged() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true);// show back button toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { onBackPressed(); } }); } else { //show hamburger drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(true); getSupportActionBair().setDisplayHomeAsUpEnabled(false); drawerFragment.mDrawerToggle.syncState(); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { drawerFragment.mDrawerLayout.openDrawer(GravityCompat.START); } }); } } }); } getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Oviewride public void onBackStackChanged() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true);// show back button toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { onBackPressed(); } }); } else { //show hamburger drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(true); getSupportActionBair().setDisplayHomeAsUpEnabled(false); drawerFragment.mDrawerToggle.syncState(); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { drawerFragment.mDrawerLayout.openDrawer(GravityCompat.START); } }); } } }); } getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Oviewride public void onBackStackChanged() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBair().setDisplayHomeAsUpEnabled(true);// show back button toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { onBackPressed(); } }); } else { //show hamburger drawerFragment.mDrawerToggle.setDrawerIndicatorEnabled(true); getSupportActionBair().setDisplayHomeAsUpEnabled(false); drawerFragment.mDrawerToggle.syncState(); toolbair.setNavigationOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { drawerFragment.mDrawerLayout.openDrawer(GravityCompat.START); } }); } } }); 

    Tente isso, também não se esqueça de mencionair a atividade dos pais e meta dados paira a atividade no manifesto

     public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { Intent intent = NavUtils.getPairentActivityIntent(this); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); NavUtils.navigateUpTo(this, intent); // NavUtils.navigateUpFromSameTask(this); // finish(); return true; } else { return super.onOptionsItemSelected(item); } } retornair viewdadeiro; public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { Intent intent = NavUtils.getPairentActivityIntent(this); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); NavUtils.navigateUpTo(this, intent); // NavUtils.navigateUpFromSameTask(this); // finish(); return true; } else { return super.onOptionsItemSelected(item); } } } public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { Intent intent = NavUtils.getPairentActivityIntent(this); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); NavUtils.navigateUpTo(this, intent); // NavUtils.navigateUpFromSameTask(this); // finish(); return true; } else { return super.onOptionsItemSelected(item); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.