我有一个应用程序包含多个导航抽屉中的碎片。
以下是我的代码:
基本上,它首先进入HomeFragment,当我想要进入其他fragment MediaFragment并决定按下返回按钮回到HomeFragment时,当我再次按下返回按钮关闭应用程序时,它将像Gmail应用程序一样关闭应用程序。我该如何实现这一点?我在我的onBackPressed()中使用的代码出现了问题。每当我进入其他片段时,HomeFragment就会显示出来。有什么建议吗?非常感谢您的帮助。
更新:以前当我在MediaFragment中按下返回按钮时,它会自动关闭应用程序。它不应该是这样的,而应该转到HomeFragment,当它在HomeFragment中并且我点击返回按钮时,它将关闭应用程序。
以下是我的代码:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_search).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
/**
* Diplaying fragment view for selected nav drawer list item
* */
private void displayView(int position) {
// update the main content by replacing fragments
fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment = new GalleryFragment();
break;
case 2:
fragment = new ContactFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() {
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.frame_container, fragment).commit();
int position = 0;
fragment = new HomeFragment();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
基本上,它首先进入HomeFragment,当我想要进入其他fragment MediaFragment并决定按下返回按钮回到HomeFragment时,当我再次按下返回按钮关闭应用程序时,它将像Gmail应用程序一样关闭应用程序。我该如何实现这一点?我在我的onBackPressed()中使用的代码出现了问题。每当我进入其他片段时,HomeFragment就会显示出来。有什么建议吗?非常感谢您的帮助。
更新:以前当我在MediaFragment中按下返回按钮时,它会自动关闭应用程序。它不应该是这样的,而应该转到HomeFragment,当它在HomeFragment中并且我点击返回按钮时,它将关闭应用程序。
transaction.addToBackStack(null);
而要弹出,请参阅 http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack() - Raghunandan