导航Drawer-显示家庭片段作为默认片段、家庭、Drawer

2023-09-06 06:52:43 作者:一介俗人

我重视导航抽屉我的应用程序主活动。抽屉式导航栏有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:机器人=htt​​p://schemas.android.com/apk/res/android    机器人:layout_width =match_parent    机器人:layout_height =match_parent    机器人:方向=垂直>    <包括布局=@布局/工具栏/>    < android.support.v4.widget.DrawerLayout        的xmlns:机器人=htt​​p://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();
    }
}