【发布时间】:2017-05-17 02:38:00
【问题描述】:
我在片段事务中遇到了一些小错误。当我打开多个片段并按下后退按钮并且工具栏上显示的标题错误时,就会出现问题。
例如,在我的Home -> Expenses fragment 中,我从费用片段中按下后退按钮,工具栏上显示的标题是正确的。
但是,假设Home -> Expenses -> Incomes fragment,我从收入片段按返回按钮,它将返回主页片段,但工具栏上显示的标题将是“费用”而不是“主页”。
这是我对 MainActivity 的设置,它扩展了 AppCompatActivity:
// inside onCreate() put all these code
//Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
// This method will trigger on item Click of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
//Checking if the item is in checked state or not, if not make it in checked state
if(menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
//Closing drawer on item click
drawerLayout.closeDrawers();
//Check to see which item was being clicked and perform appropriate action
final Bundle bundle = new Bundle();
switch (menuItem.getItemId()){
case R.id.home:
getSupportActionBar().setTitle("Home");
return true;
case R.id.expenses:
return true;
case R.id.incomes:
return true;
case R.id.history:
return true;
case R.id.setting:
return true;
}
}
});
然后在我扩展 Fragment 的每个片段中,我设置标题并覆盖后退按钮:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_expense,container,false);
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Expenses");
// override on back key pressed back to main fragment
v.setFocusableInTouchMode(true);
v.requestFocus();
v.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if( keyCode == KeyEvent.KEYCODE_BACK ) {
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Home");
return true;
} else {
return false;
}
}
});
return v;
}
我什至添加了这一行((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Home"); 以在单击后退按钮时设置标题,但这是徒劳的。
【问题讨论】:
-
有什么想法吗?我的问题不清楚吗?
-
你为什么要这样处理后退按钮?
-
我在网上找到的,直接回到我的主要片段。
-
这样尝试: 1. 在你的活动中以这种方式覆盖 onBackPress:@Override public void onBackPressed() { if (count == 0) { super.onBackPressed(); } else { getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); } } 2. 移除fragment的KeyListener。
标签: java android android-fragments toolbar