Android 谷歌导航抽屉,处理回压设置正确的检查
目前使用的谷歌导航抽屉,在用户按下时出现一些问题Android 谷歌导航抽屉,处理回压设置正确的检查,android,android-fragments,navigation-drawer,onbackpressed,Android,Android Fragments,Navigation Drawer,Onbackpressed,目前使用的谷歌导航抽屉,在用户按下时出现一些问题 当用户反按时,他们不会更新菜单项 我单击应用程序时的示例。顺序是A>B>C>B>C,如果我按反键,我想成为C>B>A。我应该如何编写这种方式 我的代码 public class MainActivity extends AppCompatActivity { private String appTitle; private Toolbar toolbar; private NavigationView navigatio
public class MainActivity extends AppCompatActivity {
private String appTitle;
private Toolbar toolbar;
private NavigationView navigationView;
private DrawerLayout drawerLayout;
private TextView toolbarTitle;
private Fragment fragment;
private FragmentManager fragmentManager;
private Title title;
private MenuItem menuItem2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
toolbarTitle.setTextColor(Color.parseColor("#FFFFFF"));
setTitle("");
fragmentManager = getSupportFragmentManager();
fragment= new HomeFragment();
title = new Title(getApplicationContext());
fragmentManager.beginTransaction().replace(R.id.content_frame,fragment , title.getStrHome()).commit();
navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem2 = menuItem;
menuItem.setChecked(true);
drawerLayout.closeDrawers();
if (menuItem.getItemId() == R.id.nav_home) {
fragment = new HomeFragment();
appTitle = title.getStrHome();
} else if ((menuItem.getItemId() == R.id.nav_direction)) {
fragment = new DirectionFragment();
appTitle = title.getStrDirection();
} else if ((menuItem.getItemId() == R.id.nav_more)) {
fragment = new MoreFragment();
appTitle = title.getStrMore();
} else if((menuItem.getItemId()==R.id.nav_directory)){
fragment = new DirectoryFragment();
appTitle = title.getStrDirectory();
}
else {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
}
replaceFragment(fragment,appTitle);
return true;
}
});
drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
ActionBarDrawerToggle actionBarDrawerToggle =
new ActionBarDrawerToggle
(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
};
drawerLayout.setDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
}
public void onBackPressed() {
if(drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
}
else {
if (fragmentManager.getBackStackEntryCount() > 0 ){
fragmentManager.popBackStack();
toolbarTitle.setText(appTitle);
menuItem2.setChecked(true);
} else {
finish();
}
}
}
public void replaceFragment(Fragment fragment, String tag){
toolbarTitle.setText(tag);
FragmentTransaction ft = fragmentManager.beginTransaction().replace(R.id.content_frame, fragment, tag);
ft.addToBackStack(tag);
ft.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
正如Android官方页面上所述,您可以看到如何使用意图标志中的
标志\u ACTIVITY\u CLEAR\u TOP
来实现所需的行为。这张照片很好地说明了这一点
您的常规后退按钮如下所示:
当您指定此标志时,您将获得所需的行为
编辑: 官方文件指出:
FLAG\u ACTIVITY\u CLEAR\u TOP
如果正在启动的活动已在当前任务中运行,则所有
除此之外的其他活动将被销毁
这意味着,您的不同活动将不会重复,并且您将拥有一个干净的后台堆栈
在您的示例中,
A>B>C>B>C
是不可能的。相反,它将是A>B>C
,因为B和C已经存在于堆栈中,所以不会添加它们,但取而代之。正如Android官方页面上所述,您可以看到如何使用意图标志中的标志\u活动\u清除\u顶部
来实现所需的行为。这张照片很好地说明了这一点
您的常规后退按钮如下所示:
当您指定此标志时,您将获得所需的行为
编辑: 官方文件指出:
FLAG\u ACTIVITY\u CLEAR\u TOP
如果正在启动的活动已在当前任务中运行,则所有
除此之外的其他活动将被销毁
这意味着,您的不同活动将不会重复,并且您将拥有一个干净的后台堆栈
在您的示例中,
A>B>C>B>C
是不可能的。相反,它将是A>B>C
,因为B和C已经存在于堆栈中,它们不会被添加,而是被替换。研究Android活动启动模式
是否有明确的解释。
看看吧 研究Android活动启动模式 是否有明确的解释。
看看吧 对不起,我仍然不能真正理解它的意思。对不起,我仍然不能真正理解它的意思。