2017-04-21 100 views
0

我已经设置了一个工具栏并添加了一个主页导航按钮,如下所示;设置工具栏首页导航按钮跟随backstack,Android

Toolbar toolbar; 
toolbar = (Toolbar) findViewById(R.id.toolbar_home); 

//Setup toolbar 
toolbar.setTitle("Home"); 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    toolbar.setTitleTextColor(getResources().getColor(R.color.icons,null)); 
}else{ 
    toolbar.setTitleTextColor(getResources().getColor(R.color.icons)); 
} 

setSupportActionBar(toolbar); 
if (getSupportActionBar() != null) { 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
} else { 
    Log.w("Home", "toolbar null"); 
} 

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //Navigate backwards as android back button 
    } 
}); 

我想要当我按下工具栏的后退按钮后,它向后导航后面的backstack作为android后退按钮。 enter image description here

回答

0

在活动添加这个方法:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     if(item.getItemId() == android.R.id.home){ 
      onBackPressed(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
+0

谢谢,非常完美 –

0

我从很长一段时间之后这一点,没有发现任何问题呢。

HomeFragment:第一个片段,其得到加载首次

getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
       @Override 
       public void onBackStackChanged() { 
        HomeFragment currentHomeFragment = null; 
        currentHomeFragment = (HomeFragment) getFragmentManager().findFragmentByTag("HOME_FRAGMENT"); 
        if (currentHomeFragment != null && currentHomeFragment.isVisible()) { 
         getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
         toggle.syncState(); 
         toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           drawer.openDrawer(GravityCompat.START); 
          } 
         }); 
        } else { 
         if (getFragmentManager().getBackStackEntryCount() > 1) { 
          getSupportActionBar().setDisplayHomeAsUpEnabled(true); // show back button 
          toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            getFragmentManager().popBackStackImmediate(); 
           } 
          }); 

         } else { 
          getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
          toggle.syncState(); 
          toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            drawer.openDrawer(GravityCompat.START); 
           } 
          }); 
         } 
        } 
       } 
      }); 
0

如果您正在使用android.support.v7.widget.Toolbar此代码添加到您的AppCompatActivity:在

@Override 
    public boolean onSupportNavigateUp() { 
     onBackPressed(); 
     return true; 
    } 
0

你写的onClick onBackPressed();清单中

<activity android:name=".XYZActivity" 
       android:parentActivityName=".MainActivity" /> 
0
  1. MainActivity onCreate()方法中的设置工具栏。

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_home); 
    toolbar.setTitle("Activity Name"); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    
  2. 在MainActivity一级执行以下方法设置背面导航。

    @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } }

  3. 效果很好..

@Rajesh