Android 返回到上一个片段无法正常工作
我正在使用一个导航抽屉,当我选择一个项目时,它会正确地将上一个片段替换为我选择的片段,但是如果我打开另一个片段,然后单击“上一步”按钮,它会转到上一个活动而不是上一个片段,它这样做有什么不对Android 返回到上一个片段无法正常工作,android,android-fragments,back,Android,Android Fragments,Back,我正在使用一个导航抽屉,当我选择一个项目时,它会正确地将上一个片段替换为我选择的片段,但是如果我打开另一个片段,然后单击“上一步”按钮,它会转到上一个活动而不是上一个片段,它这样做有什么不对 private void selectItem(int position) { Fragment newFragment; FragmentTransaction transaction = getFragmentManager().beginTransaction(); switc
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);
}
您正在将null添加到backbackback-
transaction.addToBackStack(null);
将此空值替换为片段的标记名
它会起作用。您可以在
onBackPressed
中使用getFragmentManager().popBackStack()
方法:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
getFragmentManager().beginTransaction().commit();
}
else {
super.onBackPressed();
}
}
不要忘记在BackStack中添加片段,如:
transaction.addToBackStack(null);
编辑:
要在actionbar中显示当前片段名称,您可以在FragmentActivity的onResume
上获取它:
@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");
}
}
希望能有帮助ツ 不,您可以将null设置为该方法。不管它是否为空。根据文档,为了记住交易,我们将把它添加到backstack-如果你在这里设置为空,它将向backstack添加片段,如果你设置字符串,它也将向backstack添加片段。这很好,尽管当我按下后退按钮时,我的活动标题确实反映了从Backback加载的当前片段?@MysticMagic这很好,尽管当我按下back按钮时,“我的活动”的标题确实反映了从后台加载的当前片段?是否要反映名称?我希望在再次加载旧片段时更改工具栏标题。我通常使用这个设置标题(导航[position]);但那是在交换机内部,所以它不会被调用@sweetwiser您可以在
onResume
中获取当前片段,并相应地设置标题