我正在使用导航抽屉,当我选择一个项目时,它会正确地将前一个片段替换为我选择的片段,但是如果我打开另一个片段,然后单击后退按钮,它将转到上一个活动而不是上一个活动片段,这样做有什么问题吗?
private void selectItem(int position) {
Fragment newFragment;
FragmentTransaction transaction = getFragmentManager().beginTransaction();
switch (position){
case 0:
//Update
newFragment = new UpdateFragment();
transaction.replace(R.id.content_frame, newFragment);
transaction.addToBackStack(null);
transaction.commit();
listView.setItemChecked(position, true);
setTitle(navigationDrawerItems[position]);
break;
case 1:
//Maps
newFragment = new TimetableFragment();
transaction.replace(R.id.content_frame, newFragment);
transaction.addToBackStack(null);
transaction.commit();
listView.setItemChecked(position, true);
setTitle(navigationDrawerItems[position]);
break;
case 2:
//Timetables
newFragment = new TimetableFragment();
transaction.replace(R.id.content_frame, newFragment);
transaction.addToBackStack(null);
transaction.commit();
listView.setItemChecked(position, true);
setTitle(navigationDrawerItems[position]);
break;
case 3:
//Notes
newFragment = new TimetableFragment();
transaction.replace(R.id.content_frame, newFragment);
transaction.addToBackStack(null);
transaction.commit();
listView.setItemChecked(position, true);
setTitle(navigationDrawerItems[position]);
break;
case 4:
//About
newFragment = new AboutFragment();
transaction.replace(R.id.content_frame, newFragment);
transaction.addToBackStack(null);
transaction.commit();
listView.setItemChecked(position, true);
setTitle(navigationDrawerItems[position]);
break;
case 5:
//Settings
newFragment = new SettingsFragment();
transaction.replace(R.id.content_frame, newFragment);
transaction.addToBackStack(null);
transaction.commit();
listView.setItemChecked(position, true);
setTitle(navigationDrawerItems[position]);
break;
}
//listView.setItemChecked(position, true);
//setTitle(navigationDrawerItems[position]);
drawerLayout.closeDrawer(listView);
}
您可以使用getFragmentManager().popBackStack()
中的方法onBackPressed
:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
getFragmentManager().beginTransaction().commit();
}
else {
super.onBackPressed();
}
}
不要忘记在 BackStack 中添加片段,例如:
transaction.addToBackStack(null);
Edit :
要在操作栏中显示当前片段名称,您可以获取它onResume
您的 FragmentActivity 的:
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
FragmentManager fragManager = this.getSupportFragmentManager();
int count = this.getSupportFragmentManager().getBackStackEntryCount();
// Fetch last fragment
Fragment fragment = fragManager.getFragments().get(count>0?count-1:count);
// Check with your possible Fragment class
if( fragment instanceof OneFragment)
{
setTitle("OneFragment");
}
else if(fragment instanceof TwoFragment)
{
setTitle("TwoFragment");
}
}
希望有帮助ツ
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)