【问题标题】:How to fix fragments backstack issues in android如何修复android中的fragments backstack问题
【发布时间】:2017-04-06 05:57:36
【问题描述】:

大家好,我的代码有问题,我正在使用一个主要活动和两个片段(mainfragment,mainsubfragment),该应用程序是关于从 json 解析器获取数据并将其显示在 mainfragment 中,当您单击它时,它应该在 mainsubfragment 中显示一些数据。问题是,当我单击 mainfragment 中的一个显示项时,它用 mainsubfragment 替换这个片段,它应该从另一个 json 解析器获取更多数据,但是当我按下它时,它什么也不显示回到 mainfragment 那里也没有任何显示。快速帮助将不胜感激......

【问题讨论】:

  • 你的代码肯定有错误。

标签: android json android-fragments


【解决方案1】:

创建一个名为 NavigationHandler 的单例并向其添加以下函数:

打开MainFragment的函数:

public void openMainFragment(FragmentManager fragmentManager, MainFragment fragment){
        String backStackName = fragment.getClass().getSimpleName();
        fragmentManager.beginTransaction()
                .replace(R.id.fl_main_container, fragment)
                .addToBackStack(backStackName)
                .commit();
    }

打开子片段的函数:

public void openSubFragment(FragmentManager fragmentManager, SubFragment fragment){
        String backStackName = fragment.getClass().getSimpleName();
        fragmentManager.popBackStackImmediate(backStackName, POP_BACK_STACK_INCLUSIVE);
        fragmentManager.beginTransaction()
                .replace(R.id.fl_main_container, fragment)
                .addToBackStack(backStackName)
                .commit();
    }

对于背压:

public void navigateBackBy(AppCompatActivity activity, int numOfFragments){
        if(mFragmentManager.getBackStackEntryCount()==1){
            activity.finish();
        }
        else {
            int i;
            for (i = 0; i < numOfFragments; i++) {
                mFragmentManager.popBackStackImmediate();
            }
        }
    }

在您的活动中:

  1. 调用 openMainFragment(...) 打开带有列表的 MainFragment。

  2. 在调用适配器构造函数时,将 FragmentManager 作为参数传递。

  3. 覆盖 onBackPressed() 并添加调用 navigateBackBy(this, 1);。此方法对于任何不返回都很有用。片段。

在您的适配器内部:

  1. 单击项目时调用 openSubFragment(...)。

【讨论】:

  • 对于您的第二个问题,您的 SubFragment 中没有显示任何内容,首先检查您是否在 JSON 响应中获得任何数据,以及解析 JSON 后是否有数据。
  • 非常感谢 Aishwarya Tiwari 的回复,我将按照您提到的方式尝试代码 ...
  • 有什么问题?
  • 做一件事。向主片段和子片段添加不同的背景颜色,然后运行它。查找正在显示的视图/布局是一个简单的调试。
  • 你是对的,我改变了两个片段的颜色(蓝色的 MainFragment 和粉红色的 MainSubFragment) MainFragment 显示但是当我点击他的一个项目时,只有白色屏幕显示就是这样。 .
【解决方案2】:

欢迎来到stackoverflow 据你说,你正在使用两个片段 1.mainfragment >> 不要添加到 addToBackStack 2.mainsubfragment>>添加到addToBackStack

对于 fragmetn1 调用,如

   Fragment  fragment = new mainfragment();
   FragmentManager fragmentManager = getSupportFragmentManager();
   fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

第二个片段2

        fragment = new mainsubfragment();
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().addToBackStack(null).replace(R.id.content_frame, fragment).commit();

然后它会起作用,并且在后面的压力也将起作用

【讨论】:

  • 感谢 Binesh kumar 的快速回复,基本上我正在替换适配器类的片段。
  • 为什么你从适配器调用
猜你喜欢
  • 2016-05-12
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
相关资源
最近更新 更多