【问题标题】:popBackStack and addToBackStack in AndroidAndroid 中的 popBackStack 和 addToBackStack
【发布时间】:2016-03-19 21:07:38
【问题描述】:

我对 android 非常陌生,并尝试将我的 iphone 应用程序转换为 android。我尝试在片段之间导航,在从片段 A 导航到 B 后,我想使用后退按钮从片段 B 返回到 A。我做了一个研究,但不能很好地理解它。在下面的代码中,我有一个导航抽屉,我在其中导航片段。单击关注者后,我想使用返回按钮返回新闻源。

//this is the navigation drawer part     
if (id == R.id.my_archive_drawer) {

                myArchiveFragment fragment = new myArchiveFragment();
                android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.addToBackStack("newsFeedFragment");
                fragmentTransaction.commit();

            } else if (id == R.id.followers_drawer) {

                followedFollowersFragment fragment = new followedFollowersFragment();
                android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.addToBackStack("newsFeedFragment");
                fragmentTransaction.commit();

            } 
//this is the navigation drawer part   



//this is the on create part part   
        newsFeedFragment fragment = new newsFeedFragment();
        android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
//this is the on create part part  


//onbackpreseed part
   public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            getFragmentManager().popBackStack("newsFeedFragment");
        }
    }
//onbackpressed part

【问题讨论】:

    标签: android android-fragments fragment-backstack


    【解决方案1】:

    addToBackStack 表示将片段放入堆栈。这意味着当您将片段新闻推送给片段关注者时,您将片段添加到堆栈中。因此,当您返回时,您会返回新闻片段。

    试试这个代码:

    followedFollowersFragment fragment = new followedFollowersFragment();
    android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.fragment_container, fragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
    

    然后在您的 onBackPressed() 中删除 popbackstack(),因为当您调用 onBackPressed 单击返回按钮时,您已经删除了关注者片段。所以 onBackPressed() 应该是这样的:

     @Override
     public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
    

    有关这两种方法的更多信息,您可以阅读here

    【讨论】:

    • 非常感谢 JpCrow,它成功了:) 如果我在“on create”部分创建的 news_freed 片段(起始片段)中时想禁用后退按钮怎么办?
    • 在这种情况下,您应该覆盖 onBackPressed() 而不是调用 super.onBackPressed();只有在这种情况下,您才应该添加标志或其他东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多