【问题标题】:Showing the first fragment after returning from the next tab从下一个选项卡返回后显示第一个片段
【发布时间】:2018-01-26 07:13:44
【问题描述】:

我使用 ViewPager 和 Tabs。我有 3 个选项卡,在第一个选项卡 (Tab_1) 中,我从 FragmentA 切换到 FragmentB。然后我传递到第二个选项卡 (Tab_2)。之后我返回 Tab_1。实际上,显示的是片段 B,但我希望片段 A 在我从 Tab_2 返回到 Tab_1 时显示。我希望在 tab1 中具有相同的行为,我从 FragmentA 切换到 FragmentB,如果我传递到 Tab_3 并返回到 Tab_1,则显示的是 FragmentA。我该怎么做?

【问题讨论】:

  • 请附上你目前所做的一些代码

标签: android android-fragments android-viewpager android-tablayout


【解决方案1】:

你有没有在OnResume()的呼叫中尝试SetCurrentItem(int i) for ViewPager

【讨论】:

  • 您的意思是在Fragment 中调用onResume() 吗?
  • 活动中没有
  • 是的,但是如果我从一个选项卡切换到另一个选项卡,则不会调用 onResume()
【解决方案2】:

在mainActivity 中添加addtoBackStack method.follow 下面的代码。

private void loadfragment(Fragment fragment) {

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.addToBackStack("");

        fragmentTransaction.commit();

    }

    public void onBackPressed() {

        if (getFragmentManager().getBackStackEntryCount() > 0) {
            getFragmentManager().popBackStackImmediate();
        } else {

            super.onBackPressed();
        }

【讨论】:

  • 我已经添加了这个方法,但我的问题不是后退按钮,而是并排选项卡
【解决方案3】:

您可以创建一个 baseFragment 来处理后按导航逻辑并将该片段扩展到您的片段

public abstract class BackStackFragment extends Fragment {
    public static boolean handleBackPressed(FragmentManager fm)
    {
        if(fm.getFragments() != null){
            for(Fragment frag : fm.getFragments()){
                if(frag != null && frag.isVisible() && frag instanceof BackStackFragment){
                    if(((BackStackFragment)frag).onBackPressed()){
                        return true;
                    }
                }
            }
        }
        return false;
    }

    protected boolean onBackPressed()
    {
        FragmentManager fm = getChildFragmentManager();
        if(handleBackPressed(fm)){
            return true;
        } else if(getUserVisibleHint() && fm.getBackStackEntryCount() > 0){
            fm.popBackStack();
            return true;
        }
        return false;
    }

}

https://medium.com/@nilan/separate-back-navigation-for-a-tabbed-view-pager-in-android-459859f607e4

在上面的链接中,他们已经解释了如何处理 tablayout 和 tablayout 的后退导航,并在 backpressed 上更改片段

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-04-13
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
相关资源
最近更新 更多