我已将导航抽屉附加到我的应用程序的主Activity
。
导航抽屉有4个选项,可以将用户导航到4个不同的片段f1,f2,f3和f4。
我创建了一个主页Fragment
fh。
我没有在导航抽屉中添加fh作为选项。
片段fh填充数据进行http调用。
每当用户选择f1,f2,f3或f4时;需要显示相应的片段。
直到这里一切正常。
但是,每当用户按下后退按钮时,都应显示fh。即。 content_frame应该包含fh。 我无法做到这一点。
现在,每当用户按下后退按钮时,默认视图为空白。
此外,由于fh进行http调用以填充数据,因此需要显示添加到堆栈的fh。
这是我的实施:
MainActivity- OnCreate
mDrawerLayout.closeDrawer(mDrawerList);
setUpHomeFragment();
以下是我在点击导航抽屉项目时管理片段的方法......
private void showFrg(Fragment fragment){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.content_frame, fragment).commit();
}
setUpHomeFragment函数,在oncreate()上只调用一次
private void setUpHomeFragment(){
mLandingPageFragment=new ReadyMyOrderCollections();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, mLandingPageFragment);
ft.addToBackStack(null);
ft.commit();
}
MainActivity XML Layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include layout="@layout/toolbar" />
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include
android:layout_width="@dimen/drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
layout="@layout/list_view" />
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
答案 0 :(得分:2)
我在这里找到了解决这个问题最干净的方法:
https://stackoverflow.com/a/21093352/1348550
在活动onCreate
上调用setUpLandingFragment一次。
private void setUpLandingFragment(){
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack();
fragmentManager.beginTransaction()
.add(R.id.content_frame, new LandingFragment()).commit();
}
在导航抽屉项目上单击:
private void changeFrag (Fragment f) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack();
fragmentManager.beginTransaction()
.add(R.id.content_frame, f).addToBackStack("fragBack").commit();
}
关于这个解决方案最酷的部分是,根本不需要onBackPressed。
答案 1 :(得分:1)
我的工作是
private int getFragmentCount() {
return getSupportFragmentManager().getBackStackEntryCount();
}
在您的活动中
@Override
public void onBackPressed() {
if(getFragmentCount()>0) {
getSupportFragmentManager().popBackStackImmediate();
}else{
super.onBackPressed();
}
}