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());
我正在尝试对我的应用实施某种搜索,以过滤 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());