我重视导航抽屉我的应用程序主活动。抽屉式导航栏有4个选项,将用户导航到4种不同的片段F1,F2,F3和F4。
我创建了一个主页片段
FH。我不加入FH中的导航抽屉一个选择即可。
片段FH填充数据制作HTTP调用。
每当用户选择的F1,F2,F3或F4;相应的片段需要显示回来。
到这里一切工作正常。
然而,每当用户preSS返回按钮,然后FH应显示。 IE浏览器。 content_frame应该包含FH。我无法做到这一点的部分。
现在,每当用户preSS后退按钮,默认视图是空白的。
另外,由于FH使HTTP调用来填充数据,从而FH已添加到堆栈的需要要显示
下面是我的实现:
MainActivity-的OnCreate
mDrawerLayout.closeDrawer(mDrawerList);setUpHomeFragment();
下面是我正在努力应付片段,在导航抽屉单击的项目...
私人无效showFrg(片段片段){ FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.addToBackStack(NULL); fragmentTransaction.replace(R.id.content_frame,片段).commit();}
该setUpHomeFragment功能,也就是所谓的只是一次活动上OnCreate中()
私人无效setUpHomeFragment(){ mLandingPageFragment =新ReadyMyOrderCollections(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction英尺= fragmentManager.beginTransaction(); ft.replace(R.id.content_frame,mLandingPageFragment); ft.addToBackStack(NULL); ft.commit(); }
MainActivity XML布局:
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android 机器人:layout_width =match_parent 机器人:layout_height =match_parent 机器人:方向=垂直> <包括布局=@布局/工具栏/> < android.support.v4.widget.DrawerLayout 的xmlns:机器人=http://schemas.android.com/apk/res/android 机器人:ID =@ + ID / drawer_layout 机器人:layout_width =match_parent 机器人:layout_height =match_parent> <的FrameLayout 机器人:ID =@ + ID / content_frame 机器人:layout_width =match_parent 机器人:layout_height =match_parent/> <包括 机器人:layout_width =@扪/ drawer_width 机器人:layout_height =match_parent 机器人:layout_gravity =开始 布局=@布局/ list_view/> < /android.support.v4.widget.DrawerLayout>< / LinearLayout中>
解决方案
我的工作围绕这是
私人诠释getFragmentCount(){ 返回getSupportFragmentManager()getBackStackEntryCount()。}
在你的活动
@覆盖公共无效onBack pressed(){ 如果(getFragmentCount()大于0){ 。getSupportFragmentManager()popBackStackImmediate(); }其他{ super.onBack pressed(); }}
I have attached navigation drawer to main Activity
of my application.
Navigation drawer have 4 options that will navigate user to 4 different fragments f1, f2, f3 and f4.
I have created a home page Fragment
fh.
I am not adding fh as a choices in Navigation Drawer.
Fragment fh populates data making http call.
Whenever user selects f1, f2, f3 or f4; the respective fragments need to be shown back.
Till here everything is working fine.
However, whenever user press back button, then fh should be displayed. ie. content_frame should contain fh. I am unable to do this portion.
Right now, whenever user press back button, the default view is blank.
Also, since fh makes a http call to populate data, so fh that was added to stack needs to be shown.
Here is my implementation:
MainActivity- OnCreate
mDrawerLayout.closeDrawer(mDrawerList);
setUpHomeFragment();
Here is how I am managing fragment, on navigation drawer item clicked...
private void showFrg(Fragment fragment){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.content_frame, fragment).commit();
}
The setUpHomeFragment Function, that is called just once on activity 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>
解决方案
My work around for this is
private int getFragmentCount() {
return getSupportFragmentManager().getBackStackEntryCount();
}
In your Activity
@Override
public void onBackPressed() {
if(getFragmentCount()>0) {
getSupportFragmentManager().popBackStackImmediate();
}else{
super.onBackPressed();
}
}