堆栈管理问题与抽屉式导航栏 [英] Stack management issue with navigation drawer

查看:202
本文介绍了堆栈管理问题与抽屉式导航栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

抽屉式导航和我使用片段导航抽屉,问题是,当我preSS后退按钮我的应用程序越来越接近,下面是我的mainactivity code和第一片段抽屉

MainActivity.java

  @覆盖
    公共无效onDrawerItemSelected(查看视图,INT位置){
        displayView(位置);
    }    私人无效displayView(INT位置){
        片段片段= NULL;
        字符串title =的getString(R.string.app_name);        开关(位置){
            情况下0:
                片段=新HomeFragment();                标题=的getString(R.string.title_home);
                打破;
            情况1:
                片段=新FriendsFragment();
                标题=的getString(R.string.title_friends);
                打破;
            案例2:
                片段=新MessagesFragment();
                标题=的getString(R.string.title_messages);
                打破;            案例3:
                片段=新的配置文件();
                标题=的getString(R.string.title_pro);
                打破;
            情况4:
                片段=新AboutUsFragment();
                标题=的getString(R.string.title_aboutus);
                打破;
            情况5:
                片段=新的FAQ();
                标题=的getString(R.string.title_faq);
                打破;
            情况6:
                片段=新的个人信息保护();
                标题=的getString(R.string.title_privacypolicy);
                打破;
            案例7:
                片段=新联系我们();
                标题=的getString(R.string.title_contacts);
                打破;            案例8:
                // session.logoutUser();
                。LoginManager.getInstance()退出();
               //意向意图=新意图(MainActivity.this,LoginPage.class);
                // startActivity(意向);
                标题=的getString(R.string.title_logout);
                打破;
            默认:
                打破;
        }        如果(片段!= NULL){
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_body,片段).addToBackStack(ABCD);
            fragmentTransaction.commit();
            getSupportActionBar()的setTitle(职称)。
        }
    }   / * @覆盖
    公共无效onBack pressed(){        诠释计数= getFragmentManager()getBackStackEntryCount()。        如果(计数== 0){
            super.onBack pressed();
            //额外的code
        }其他{
            getFragmentManager()popBackStack()。
        }    } * /    @覆盖
    公共无效onBack pressed(){
        FragmentManager FM = getSupportFragmentManager();
        如果(fm.getBackStackEntryCount()大于0){
            Log.i(MainActivity,啪backstack);
            fm.popBackStack();        }其他{
            Log.i(MainActivity,没事就backstack,称超级);
            super.onBack pressed();
        }
    }

HomeFragment.java

 公共类HomeFragment扩展片段{    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    清单<串GT; listDataHeader;
    HashMap的<字符串列表<串GT;> listDataChild;    私人FragmentTabHost tabHost;
    私人搜索查看搜索查看;
    公共HomeFragment(){
    }    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                             捆绑savedInstanceState){        tabHost =新FragmentTabHost(getActivity());
        tabHost.setup(getActivity(),getChildFragmentManager(),R.layout.my_parent_fragment);
        // strText的= getArguments()的getString(user_login_id);
        //的System.out.println(<<<<<<<<<<<<<<会话ID:+ strText的);        捆绑ARG1 =新包();
        arg1.putInt(精氨酸为Frag1,1);
       / *如果(strText的!= NULL){
            arg1.putString(user_logid,strText的);
        } * /        tabHost.addTab(tabHost.newTabSpec(1)setIndicator(getTabIndicator(tabHost.getContext(),R.drawable.icon_profile_tabs,家)),DiscoverFragment.class,ARG1);
        捆绑ARG2 =新包();        arg2.putInt(精氨酸为Frag2,2);       / *如果(strText的!= NULL){
            arg2.putString(user_logid_sectab,strText的);
        } * /        tabHost.addTab(tabHost.newTabSpec(SEC)。
                setIndicator(getTabIndicator(tabHost.getContext(),R.drawable.icon_frnds_tab,邀​​请)),ShopFragment.class,ARG2);
        捆绑ARG3 =新包();
        arg3.putInt(精氨酸为Frag3,3);      / *如果(strText的!= NULL){
            arg3.putString(user_logid_thirdtab,strText的);
        } * /        tabHost.addTab(tabHost.newTabSpec(三)。
                setIndicator(getTabIndicator(tabHost.getContext(),R.drawable.icon_wish_tab,愿望)),Thirdtab.class,ARG3);
        捆绑ARG4 =新包();
        arg4.putInt(精氨酸为Frag4,4);
        / *如果(strText的!= NULL){
            arg4.putString(user_logid_fourthtab,strText的);
        } * /        tabHost.addTab(tabHost.newTabSpec(四)。
                setIndicator(getTabIndicator(tabHost.getContext(),R.drawable.icon_notification_tab,警报)),FourthTabs.class,ARG4);        返回tabHost;
    }    @覆盖
    公共无效onAttach(活动活动){
        super.onAttach(活动);
    }    @覆盖
    公共无效onDetach(){
        super.onDetach();
    }    公共查看getTabIndicator(上下文的背景下,INT图标,文本字符串){
        查看查看= LayoutInflater.from(上下文).inflate(R.layout.tab_layout,NULL);
        ImageView的IV =(ImageView的)view.findViewById(R.id.indicatorImageView);
        iv.setImageResource(图标);
        TextView的TXT =(TextView中)view.findViewById(R.id.txttb);
        txt.setText(文本);
        返回视图。
    }
}

DiscoverFragment.java

 公共类DiscoverFragment扩展片段{
    私人按钮BTN;    公共DiscoverFragment(){
    }    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                             捆绑savedInstanceState){        查看rootView = inflater.inflate(R.layout.discover_frag,集装箱,FALSE);        BTN =(按钮)rootView.findViewById(R.id.btnhomf);        btn.setOnClickListener(新OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                WishaFriend FF =新WishaFriend();                android.app.FragmentManager FM = getActivity()getFragmentManager()。
                android.app.FragmentTransaction英尺= fm.beginTransaction();               // ft.replace(R.id.container_body,FF);
                ft.replace(((的ViewGroup)getView()的getParent())的getId(),FF);
                // ft.addToBackStack(HomeFragment.class.getName());
                ft.commit();
            }
        });        返回rootView;
    }}


解决方案

我想会有基地的活动在您的抽屉和片段嵌入/托管赖特?搜索结果这是因为除了孩子的碎片,所有其他的片段嵌入结果我也遇到过同样的问题,解决了通过执行以下主办的活动。搜索结果LandingFragment是,一旦应用启动,我展示的第一个片段。所有的人都亚碎片这我们添加到托管的活动。希望这有助于!!结果

 公共类HomeActivity扩展AppCompatActivity
            实现NavigationView.OnNavigationItemSelectedListener {
    @覆盖
        保护无效的onCreate(捆绑savedInstanceState){
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.activity_home);
            工具条工具栏=(栏)findViewById(R.id.toolbar);
            setSupportActionBar(工具栏);            DrawerLayout抽屉=(DrawerLayout)findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle切换=新ActionBarDrawerToggle(
                    对此,抽屉,工具栏,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
            drawer.setDrawerListener(切换);
            toggle.syncState();            NavigationView navigationView =(NavigationView)findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(本);
            FragmentManager fragmentManager = getSupportFragmentManager();            如果(空== savedInstanceState){
                FragmentManager fragmentManager = getSupportFragmentManager();            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            片段FRAG =新LandingFragment();
            fragmentTransaction.replace(R.id.mainContent,FRAG);
            fragmentTransaction.addToBackStack(frag.getClass()getSimpleName());
            fragmentTransaction.commit();
            }
        }    @覆盖
        公共无效onBack pressed(){
            DrawerLayout抽屉=(DrawerLayout)findViewById(R.id.drawer_layout);
            如果(drawer.isDrawerOpen(GravityCompat.START)){
                drawer.closeDrawer(GravityCompat.START);
            }其他{
                FragmentManager fragmentManager = getSupportFragmentManager();
                片段currentFragment =(片段)fragmentManager.findFragmentById(R.id.mainContent);
                如果(currentFragment = NULL&放大器;!&安培; currentFragment的instanceof LandingFragment){
                    showAlertDialog(这一点,应用程序退出,你想退出吗?,FALSE);
                }其他{
                    super.onBack pressed();
                }
            }
        }    @覆盖
        公共布尔onNavigationItemSelected(菜单项项){
            INT ID = item.getItemId();
            replaceAndClearBackStack(新LandingFragment());
            如果(ID == R.id.nav_near_track){
            }
            否则,如果(ID == R.id.nav_live_track){
                addNewFragmentWithBackStack(新LiveTrackFrag());
            }
            否则,如果(ID == R.id.nav_create_fence){
                addNewFragmentWithBackStack(新FenceBaseFrag());
            }            DrawerLayout抽屉=(DrawerLayout)findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            返回true;
        }    保护无效replaceAndClearBackStack(片段片段){
            FragmentManager FM = getSupportFragmentManager();
            fm.popBackStack(NULL,FragmentManager.POP_BACK_STACK_INCLUSIVE);
            FragmentTransaction交易= fm.beginTransaction();
            transaction.replace(R.id.mainContent,片段)
                    .addToBackStack(fragment.getClass()getSimpleName());
            器transaction.commit();
        }
公共无效addNewFragmentWithBackStack(片段片段){
        如果(片段!= NULL){
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.mainContent,片段,fragment.getClass()。getSimpleName())
                    .addToBackStack(fragment.getClass()。getSimpleName())
                    。承诺();
        }其他{
        }
    }

XML布局:结果activity_home.xml

 <?XML版本=1.0编码=UTF-8&GT?;
< android.support.v4.widget.DrawerLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:程序=htt​​p://schemas.android.com/apk/res-auto
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:ID =@ + ID / drawer_layout
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:fitsSystemWindows =真
    工具:openDrawer =开始>
    <包括
        布局=@布局/ app_bar_home
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent/>
    < android.support.design.widget.NavigationView
        机器人:ID =@ + ID / nav_view
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =match_parent
        机器人:layout_gravity =开始
        机器人:fitsSystemWindows =真
        应用:headerLayout =@布局/ nav_header_home
        应用:菜单=@菜单/ activity_home_drawer/>
< /android.support.v4.widget.DrawerLayout>

结果app_bar_home.xml:结果

 < android.support.design.widget.CoordinatorLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:程序=htt​​p://schemas.android.com/apk/res-auto
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:fitsSystemWindows =真
    工具:上下文=com.happiestminds.vodafone.mapapplication.HomeActivity>
    < android.support.design.widget.AppBarLayout
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:主题=@风格/ AppTheme.AppBarOverlay>
        < android.support.v7.widget.Toolbar
            机器人:ID =@ + ID /工具栏
            机器人:layout_width =match_parent
            机器人:layout_height =?ATTR / actionBarSize
            机器人:ATTR / colorPrimary背景=
            应用:popupTheme =@风格/ AppTheme.PopupOverlay/>
    < /android.support.design.widget.AppBarLayout>
    <包括布局=@布局/ content_home
        机器人:ID =@ + ID /日程地址搜索Maincontent
        />
< /android.support.design.widget.CoordinatorLayout>

结果content_home.xml结果

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:程序=htt​​p://schemas.android.com/apk/res-auto
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    应用:layout_behavior =@字符串/ appbar_scrolling_view_behavior
    工具:上下文=com.happiestminds.vodafone.mapapplication.HomeActivity
    工具:舒=@布局/ app_bar_home>
< / RelativeLayout的>

结果nav_header_home.xml结果

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =@扪/ nav_header_height
    机器人:背景=@绘制/ side_nav_bar
    机器人:重力=底
    机器人:方向=横向
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin
    机器人:主题=@风格/ ThemeOverlay.AppCompat.Dark>
    < ImageView的
        机器人:ID =@ + ID / ImageView的
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:paddingTop =@扪/ margin_5
        机器人:SRC =@绘制/ map_icon_small/>
    <的TextView
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=@字符串/ APP_NAME
        机器人:重力=clip_horizo​​ntal |结束
        机器人:textAppearance =@风格/ TextAppearance.AppCompat.Headline/>
< / LinearLayout中>

结果activiy_home_drawer.xml结果

 <菜单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
    <组机器人:checkableBehavior =单一>
        <项目
            机器人:ID =@ + ID / nav_near_track
            机器人:SRC =@绘制/ ic_fence_create
            机器人:标题=模块一/>
        <项目
            机器人:ID =@ + ID / nav_location_track
            机器人:SRC =@绘制/ ic_search_nearby
            机器人:标题=模块二/>
        <项目
            机器人:ID =@ + ID / nav_live_track
            机器人:SRC =@绘制/ ic_live_search
            机器人:标题=实时跟踪/>    < /组>
&所述; /菜单>

结果的我已经写来构建解决您的问题所需的所有code,除非片段的!!!
搜索结果
如果你仍然不能够解决问题后,通过此链接,显示如何创建在Android Studio中的抽屉式导航与Android工作室例如

I have Navigation drawer,and i am using Fragment with navigation drawer,the issue is when i press back button my app is getting close,following is my mainactivity code and first fragment of drawer

MainActivity.java

 @Override
    public void onDrawerItemSelected(View view, int position) {
        displayView(position);
    }

    private void displayView(int position) {
        Fragment fragment = null;
        String title = getString(R.string.app_name);

        switch (position) {
            case 0:
                fragment = new HomeFragment();

                title = getString(R.string.title_home);
                break;
            case 1:
                fragment = new FriendsFragment();


                title = getString(R.string.title_friends);
                break;
            case 2:
                fragment = new MessagesFragment();


                title = getString(R.string.title_messages);
                break;

            case 3:
                fragment = new Profiles();


                title = getString(R.string.title_pro);
                break;
            case 4:
                fragment = new AboutUsFragment();
                title = getString(R.string.title_aboutus);
                break;
            case 5:
                fragment = new FAQ();
                title = getString(R.string.title_faq);
                break;
            case 6:
                fragment = new Privacypolicy();
                title = getString(R.string.title_privacypolicy);
                break;
            case 7:
                fragment = new ContactUs();
                title = getString(R.string.title_contacts);
                break;

            case 8:
                // session.logoutUser();
                LoginManager.getInstance().logOut();
               // Intent intent=new Intent(MainActivity.this,LoginPage.class);
                // startActivity(intent);
                title = getString(R.string.title_logout);
                break;
            default:
                break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_body, fragment).addToBackStack("abcd");
            fragmentTransaction.commit();
            getSupportActionBar().setTitle(title);
        }
    }

   /* @Override
    public void onBackPressed() {

        int count = getFragmentManager().getBackStackEntryCount();

        if (count == 0) {
            super.onBackPressed();
            //additional code
        } else {
            getFragmentManager().popBackStack();
        }

    }*/

    @Override
    public void onBackPressed(){
        FragmentManager fm = getSupportFragmentManager();
        if (fm.getBackStackEntryCount() > 0) {
            Log.i("MainActivity", "popping backstack");
            fm.popBackStack();

        } else {
            Log.i("MainActivity", "nothing on backstack, calling super");
            super.onBackPressed();
        }
    }

HomeFragment.java

public class HomeFragment extends Fragment {

    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild;

    private FragmentTabHost tabHost;
    private SearchView searchView;


    public HomeFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        tabHost = new FragmentTabHost(getActivity());
        tabHost.setup(getActivity(), getChildFragmentManager(), R.layout.my_parent_fragment);
        // strtext = getArguments().getString("user_login_id");


        //  System.out.println("<<<<<<<<<<<<<< Session ID :  " + strtext);

        Bundle arg1 = new Bundle();
        arg1.putInt("Arg for Frag1", 1);
       /* if(strtext!=null) {
            arg1.putString("user_logid", strtext);
        }*/

        tabHost.addTab(tabHost.newTabSpec("one").setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_profile_tabs, "Home")), DiscoverFragment.class, arg1);
        Bundle arg2 = new Bundle();

        arg2.putInt("Arg for Frag2", 2);

       /* if(strtext!=null) {
            arg2.putString("user_logid_sectab", strtext);
        }*/

        tabHost.addTab(tabHost.newTabSpec("Sec").
                setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_frnds_tab, "Invite")), ShopFragment.class, arg2);


        Bundle arg3 = new Bundle();
        arg3.putInt("Arg for Frag3", 3);

      /*  if(strtext!=null) {
            arg3.putString("user_logid_thirdtab", strtext);
        }*/

        tabHost.addTab(tabHost.newTabSpec("Third").
                setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_wish_tab, "Wish")), Thirdtab.class, arg3);


        Bundle arg4 = new Bundle();
        arg4.putInt("Arg for Frag4", 4);
        /*if(strtext!=null) {
            arg4.putString("user_logid_fourthtab", strtext);
        }*/

        tabHost.addTab(tabHost.newTabSpec("Four").
                setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_notification_tab, "Alert")), FourthTabs.class, arg4);

        return tabHost;


    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    public View getTabIndicator(Context context, int icon, String text) {
        View view = LayoutInflater.from(context).inflate(R.layout.tab_layout, null);
        ImageView iv = (ImageView) view.findViewById(R.id.indicatorImageView);
        iv.setImageResource(icon);
        TextView txt = (TextView) view.findViewById(R.id.txttb);
        txt.setText(text);
        return view;
    }


}

DiscoverFragment.java

public class DiscoverFragment extends Fragment {


    private Button btn;

    public DiscoverFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.discover_frag, container, false);

        btn=(Button)rootView.findViewById(R.id.btnhomf);

        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                WishaFriend ff = new WishaFriend();

                android.app.FragmentManager fm = getActivity().getFragmentManager();
                android.app.FragmentTransaction ft = fm.beginTransaction();

               // ft.replace(R.id.container_body,ff);
                ft.replace(((ViewGroup) getView().getParent()).getId(), ff);
                // ft.addToBackStack(HomeFragment.class.getName());
                ft.commit();
            }
        });

        return rootView;
    }

}

解决方案

I suppose there will be base activity where your drawer and fragments are embedded/hosted wright?

This happens because apart from child fragments, all other fragments are embedded in hosted activity
I have encountered the same problem and resolved by doing the following.

LandingFragment is the first fragment that I am showing once app is launched. All others are subfragments which add's to the hosted activity. Hope this helps!!

    public class HomeActivity extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener{
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawer.setDrawerListener(toggle);
            toggle.syncState();

            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(this);
            FragmentManager fragmentManager = getSupportFragmentManager();

            if(null == savedInstanceState){
                FragmentManager fragmentManager = getSupportFragmentManager();

            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            Fragment frag=new LandingFragment();
            fragmentTransaction.replace(R.id.mainContent, frag);
            fragmentTransaction.addToBackStack(frag.getClass().getSimpleName());
            fragmentTransaction.commit();
            }
        }

    @Override
        public void onBackPressed() {
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                FragmentManager fragmentManager=getSupportFragmentManager();
                Fragment currentFragment = (Fragment)fragmentManager.findFragmentById(R.id.mainContent);
                if(currentFragment!=null && currentFragment instanceof LandingFragment){
                    showAlertDialog(this,"App Exit","Do you want to exit?",false);
                }else{
                    super.onBackPressed();
                }
            }
        }

    @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            int id = item.getItemId();
            replaceAndClearBackStack(new LandingFragment());
            if (id == R.id.nav_near_track) {
            }
            else if (id == R.id.nav_live_track) {
                addNewFragmentWithBackStack(new LiveTrackFrag());
            }
            else if (id == R.id.nav_create_fence) {
                addNewFragmentWithBackStack(new FenceBaseFrag());
            }

            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }

    protected void replaceAndClearBackStack (Fragment fragment){
            FragmentManager fm = getSupportFragmentManager();
            fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            FragmentTransaction transaction = fm.beginTransaction();
            transaction.replace(R.id.mainContent, fragment)
                    .addToBackStack(fragment.getClass().getSimpleName());
            transaction.commit();
        }
public void addNewFragmentWithBackStack(Fragment fragment) {
        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.mainContent, fragment, fragment.getClass().getSimpleName())
                    .addToBackStack(fragment.getClass().getSimpleName())
                    .commit();
        } else {
        }
    }

XML Layouts :
activity_home.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">
    <include
        layout="@layout/app_bar_home"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_home"
        app:menu="@menu/activity_home_drawer" />
</android.support.v4.widget.DrawerLayout>


app_bar_home.xml:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.happiestminds.vodafone.mapapplication.HomeActivity">
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
    </android.support.design.widget.AppBarLayout>
    <include layout="@layout/content_home"
        android:id="@+id/mainContent"
        />
</android.support.design.widget.CoordinatorLayout>


content_home.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.happiestminds.vodafone.mapapplication.HomeActivity"
    tools:showIn="@layout/app_bar_home">
</RelativeLayout>


nav_header_home.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/side_nav_bar"
    android:gravity="bottom"
    android:orientation="horizontal"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/margin_5"
        android:src="@drawable/map_icon_small" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:gravity="clip_horizontal|end"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline" />
</LinearLayout>


activiy_home_drawer.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_near_track"
            android:src="@drawable/ic_fence_create"
            android:title="Module One" />
        <item
            android:id="@+id/nav_location_track"
            android:src="@drawable/ic_search_nearby"
            android:title="Module Two" />
        <item
            android:id="@+id/nav_live_track"
            android:src="@drawable/ic_live_search"
            android:title="Live Tracking" />

    </group>
</menu>


I have written all the code required to build solution to your problem, except Fragment's !!!

If you are still not able to resolve the issue, go through this link which shows how to create an application with navigation drawer in android studio Navigation drawer with Android studio example

这篇关于堆栈管理问题与抽屉式导航栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆