在 tabLayout 中滑动到新片段并滑动回上一个片段时,应用程序崩溃

游戏TTXD

我有一个包含两个片段(片段 A 和 B)的主片段,工具栏中的上方有一个用于搜索的搜索图标。我的问题是,当我只在片段 A 和 B 之间滑动并使用搜索图标进行一些搜索过滤时,应用程序运行正常。但问题是当我在主片段中添加另一个新片段 C 时,在启动应用程序并滑动到片段 C 然后滑动回片段 A 或 B,然后单击搜索图标时,应用程序崩溃了。

这是崩溃日志

2019-03-07 22:52:10.616 28866-28866/com.example.welsenho.questfy_tw E/AndroidRuntime:致命异常:主进程:com.example.welsenho.questfy_tw,PID:28866.Casefy_tw:28866.ClassException example.welsenho.questfy_tw.MainActivityFragment.MostPopularFragment 不能转换为 com.example.welsenho.questfy_tw.MainActivityFragment.MainActivityLatestArticleFragment at com.example.welsenho.questfy_tw.MainUserActivity.MainActivity.searchFilter(MainActivity.java:303) welsenho.questfy_tw.MainUserActivity.MainActivity.access$200(MainActivity.java:50) 在 com.example.welsenho.questfy_tw.MainUserActivity.MainActivity$1.onQueryTextChange(MainActivity.java:158) 在 android.support.v7.widget.SearchView。 onTextChanged(SearchView.java:1181) at android.support.v7.widget.SearchView$10.onTextChanged(SearchView.java:1715) at android.widget.TextView。sendOnTextChanged(TextView.java:9364) at android.widget.TextView.setText(TextView.java:5397) at android.widget.TextView.setText(TextView.java:5250) at android.widget.EditText.setText(EditText.java) :113) 在 android.widget.TextView.setText(TextView.java:5207) 在 android.support.v7.widget.SearchView.onActionViewExpanded(SearchView.java:1295) 在 android.support.v7.widget.Toolbar$ExpandedActionViewMenuPresenter。 expandItemActionView(Toolbar.java:2397)expandItemActionView(Toolbar.java:2397)expandItemActionView(Toolbar.java:2397)

它说片段 A 不能投射到片段 B,但我不明白的是,如果我没有滑动到片段 C(就在片段 A 和 B 之间)一切都会很好,但是在滑动到片段 C 并滑动后回到片段 A 或 B 并单击搜索图标,然后应用程序将崩溃

主要活动的代码

private void searchFilter(String inputText, ArrayList<FirebaseDatabaseGetSet> decidedFilterList) {
    Log.d("TAG", "searchFilter");
    ArrayList<FirebaseDatabaseGetSet> filterList = new ArrayList<>();
    if (!filterList.isEmpty()) {
        filterList.clear();
    }

    MainActivityLatestArticleFragment latestArticleFragment;
    MostPopularFragment mostPopularFragment;
    MainSubjectChooseFragment mainSubjectChooseFragment;

    //MainSubjectChooseFragment mainSubjectChooseFragment(Fragment C) = (MainSubjectChooseFragment) getSupportFragmentManager().getFragments().get(0).getChildFragmentManager() .getFragments().get(2);
    latestArticleFragment(Fragment A) = (MainActivityLatestArticleFragment) getSupportFragmentManager().getFragments().get(0).getChildFragmentManager().getFragments().get(0);
    mostPopularFragment(Fragment B) = (MostPopularFragment) getSupportFragmentManager().getFragments().get(0).getChildFragmentManager().getFragments().get(1);

    Log.d("TAG", "Fragment");

    for (FirebaseDatabaseGetSet firebaseDatabaseGetSet : decidedFilterList) {
        if (firebaseDatabaseGetSet.getTitle().toLowerCase().contains(inputText.toLowerCase())) {
            filterList.add(firebaseDatabaseGetSet);
            if (currentFilterPage == 0) {
                Log.d("TAG", "Fragment0");
                if (latestArticleFragment != null) {
                    Log.d("TAG", "notNull");
                    if (!filterList.isEmpty()) {
                        Log.d("TAG", "filter");
                        latestArticleFragment.returnFilterList(filterList);
                    }
                }
            } else if (currentFilterPage == 1) {
                Log.d("TAG", "Fragment1");
                if (mostPopularFragment != null) {
                    if (!filterList.isEmpty()) {
                        mostPopularFragment.returnFilterList(filterList);
                    }
                }
            }
        }
    }

}

主片段代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_main_activity_tab, container, false);
    tabLayout = view.findViewById(R.id.main_activity_tabLayout);
    viewPager = view.findViewById(R.id.main_activity_viewpager);
    viewPager.setAdapter(new MainActivityTabAdapter(getChildFragmentManager(), Locale.getDefault().getDisplayLanguage()));
    tabLayout.post(new Runnable() {
        @Override
        public void run() {
            tabLayout.setupWithViewPager(viewPager);
        }
    });

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {
            mListener.getTabCurrentPage(i);
        }

        @Override
        public void onPageSelected(int i) {
            mListener.getTabCurrentPage(i);
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });
    return view;

适配器代码

@Override
public Fragment getItem(int i) {
    switch (i){
        case 0: return new MainActivityLatestArticleFragment();
        case 1: return new MostPopularFragment();
        case 2: return new MainSubjectChooseFragment();
    }
    return null;
}

@Override
public int getCount() {
    return 3;
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
    if (language.equals("中文")) {
        switch (position) {
            case 0:
                return "最新文章";
            case 1:
                return "熱門文章";
            case 2:
                return "相關科系";
        }
    }else {
        switch (position) {
            case 0:
                return "Latest Article";
            case 1:
                return "Most Popular";
            case 2:
                return "Program Select";
        }
    }
    return null;
}

片段 A 和 B 中的代码仅用于从 firebase 检索数据并加载到 recyclerView。它说问题是由这一行引起的latestArticleFragment(Fragment A) = (MainActivityLatestArticleFragment) getSupportFragmentManager().getFragments().get(0).getChildFragmentManager().getFragments().get(0); 部分,但我不明白的是,当我不尝试滑动到 Fragment C 时,一切正常,但是如果我确实滑动到 Fragment C 并滑动回 Fragment A & B 然后单击搜索图标,应用程序将坠毁。我已经被这个问题困扰了大约 3 天,并尝试了一些解决方案,但它无法正常工作。谁能解释为什么我遇到这个问题以及如何解决它?

二进制巴巴

我的预感是,如果您将屏幕页面限制设置为 1 以上,您就不会遇到这个问题。因此,在您的 MainFragment 中onCreateView添加以下一行:

viewPager = view.findViewById(R.id.main_activity_viewpager);
// add below line
viewpager.setOffscreenPageLimit(2)
viewPager.setAdapter(new MainActivityTabAdapter(getChildFragmentManager(), Locale.getDefault().getDisplayLanguage()));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我在片段之间滑动时,tabindicator不会从tablayout中的一个选项卡滑动到另一选项卡。字体的突出显示也没有改变

来自分类Dev

TabLayout中的片段仅在用户滑动Android时加载

来自分类Dev

无法解析滑动菜单片段中的符号“ TabLayout”

来自分类Dev

片段内的Android TabLayout

来自分类Dev

TabLayout动态使用片段

来自分类Dev

TabLayout-ViewPager-片段

来自分类Dev

片段TabLayout / GridView OutMemory

来自分类Dev

片段在tabLayout中多次出现

来自分类Dev

Android 从片段中获取 tabLayout

来自分类Dev

TabLayout 覆盖片段中的内容

来自分类Dev

Tablayout / Viewpager 中的空白片段

来自分类Dev

让 RecyclerView 显示在 Tablayout 片段中

来自分类Dev

当单击片段内的按钮时,我想转到父级TabLayout中的另一个片段

来自分类Dev

Android:片段或活动中的tablayout / viewpager片段

来自分类Dev

滑动另一个选项卡时,TabLayout 图标隐藏

来自分类Dev

打开tablayout活动时我的应用程序崩溃

来自分类Dev

使用TabLayout时ViewPager无法加载片段

来自分类Dev

TabLayout中Tab文本上方的片段内容

来自分类Dev

片段中的TabLayout问题(android / java)

来自分类Dev

片段中的Tablayout包-空对象引用

来自分类Dev

如何在Android的TabLayout中替换片段

来自分类Dev

另一个TabLayout内部的TabLayout

来自分类Dev

在viewpager中打开新片段时,应用程序崩溃

来自分类Dev

当在 tablayout 中调用其他片段时,第一个片段会出现一秒钟

来自分类Dev

设计支持库Tablayout滑动异常

来自分类Dev

在Android中编译库时TabLayout崩溃

来自分类Dev

在Android中编译库时TabLayout崩溃

来自分类Dev

处理从父片段嵌套到Tablayout片段中的图

来自分类Dev

使用TabLayout时出现NoClassDefFoundError

Related 相关文章

  1. 1

    当我在片段之间滑动时,tabindicator不会从tablayout中的一个选项卡滑动到另一选项卡。字体的突出显示也没有改变

  2. 2

    TabLayout中的片段仅在用户滑动Android时加载

  3. 3

    无法解析滑动菜单片段中的符号“ TabLayout”

  4. 4

    片段内的Android TabLayout

  5. 5

    TabLayout动态使用片段

  6. 6

    TabLayout-ViewPager-片段

  7. 7

    片段TabLayout / GridView OutMemory

  8. 8

    片段在tabLayout中多次出现

  9. 9

    Android 从片段中获取 tabLayout

  10. 10

    TabLayout 覆盖片段中的内容

  11. 11

    Tablayout / Viewpager 中的空白片段

  12. 12

    让 RecyclerView 显示在 Tablayout 片段中

  13. 13

    当单击片段内的按钮时,我想转到父级TabLayout中的另一个片段

  14. 14

    Android:片段或活动中的tablayout / viewpager片段

  15. 15

    滑动另一个选项卡时,TabLayout 图标隐藏

  16. 16

    打开tablayout活动时我的应用程序崩溃

  17. 17

    使用TabLayout时ViewPager无法加载片段

  18. 18

    TabLayout中Tab文本上方的片段内容

  19. 19

    片段中的TabLayout问题(android / java)

  20. 20

    片段中的Tablayout包-空对象引用

  21. 21

    如何在Android的TabLayout中替换片段

  22. 22

    另一个TabLayout内部的TabLayout

  23. 23

    在viewpager中打开新片段时,应用程序崩溃

  24. 24

    当在 tablayout 中调用其他片段时,第一个片段会出现一秒钟

  25. 25

    设计支持库Tablayout滑动异常

  26. 26

    在Android中编译库时TabLayout崩溃

  27. 27

    在Android中编译库时TabLayout崩溃

  28. 28

    处理从父片段嵌套到Tablayout片段中的图

  29. 29

    使用TabLayout时出现NoClassDefFoundError

热门标签

归档