Android 使用标签搜索

Android Search with tabs

我正在尝试对我的应用实施某种搜索,以过滤 TabLayout 和 ViewPager 中的数据,其中包含片段。

带有 ViewPager 和 TabLayout 的 MyFragment 的一部分:

@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ...
        search = view.findViewById(R.id.search);
        pager = view.findViewById(R.id.pager);
        TabLayout tabs = view.findViewById(R.id.tab);

        MyPagerAdapter adapter = new MyPagerAdapter(getChildFragmentManager());

        viewModel.data.observe(this, entities ->
        {
            if (entities != null) {
                repo.updateData(entities);
                pager.setAdapter(adapter);
                tabs.setupWithViewPager(pager);
            }
        });

        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if (charSequence.length() >= 2) {
for (int i = 0; i < 3; i++) {
                ContactsListFragment fragment = (ContactsListFragment) adapter.instantiateItem(pager, i);
                if (fragment.isAdded()) fragment.setSearch(s);
            }
}
                else {for (int i = 0; i < 3; i++) {
                MyListFragment fragment = (MyListFragment) adapter.instantiateItem(pager, i);
                if (fragment.isAdded()) fragment.setSearch("");
            }
}
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

        return view;
    }

当我尝试将 String 对象传递给 MyListFragment(内部只有 RecyclerView)并更改适配器中的数据时,它说我的 RecyclerView 为空。

如何将 String 对象传递给 ViewPager 的每个片段并过滤其中的数据?

我找到了答案。我试图不正确地获取 Fragment 实例。

旧代码部分(从适配器获取片段):

MyListFragment fragment = (MyListFragment) adapter.instantiateItem(pager, i);

新代码部分(从 FragmentManager 获取片段):

MyListFragment fragment = (MyListFragment) getSupportFragmentManager()
                    .findFragmentByTag("android:switcher:" + R.id.pager + ":" + pager.getCurrentItem());