Dun*_*key 3 android android-fragments navigation-drawer
我有一个在NavigationDrawer中有多个片段的应用程序.
以下是我的代码:
@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");
}
}
Run Code Online (Sandbox Code Playgroud)
它基本上是什么,它首先进入HomeFragment,当我想去其他fragmentMediaFragment并决定回去按后退按钮,我想去HomeFragment,当我想关闭应用程序再次按下后退按钮它现在将像gmail应用程序一样关闭应用程序.我怎样才能做到这一点?我使用我放入的代码时遇到了问题onBackPressed().每当我转到其他片段时,HomeFragment就会显示出来.有任何想法吗?对你的帮助表示感谢.
更新:在我进入MediaFragment并按下后退按钮之前,它会自动关闭应用程序.它不应该是,但它应该去HomeFragment,当它在HomeFragment,我点击后退按钮然后它将关闭应用程序.
为什么不跟踪选择的最后位置,而不是在onBackPressed中复制代码?
int selectedPosition = 0;
private void displayView(int position) {
... // All your current code
selectedPosition = position;
}
@Override
public void onBackPressed() {
if (selectedPosition != 0) {
displayView(0);
} else {
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4336 次 |
| 最近记录: |