android - 通过 TabLayout 向 ViewPager 传输数据(适配器:FragmentPagerAdapter)
问题描述
我正在尝试通过 TabLayout 显示 ViewPager。每个选项卡代表零件类别。也就是说,Tab 1,2,3, ... 是 Battery, Brake, Wiper, ... 扩展类 Parts 的类。但是,我只需要一个 ViewPager,它应该显示有关所选选项卡的信息。
因此,当我更改选项卡时,它应该更改 ViewPager 片段内的数据。(ViewPager 由 FragmentPagerAdapter 改编)。这是我到目前为止所尝试的。
这是调用 ViewPager 和 TabLayout 的地方。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_main_car_manager, container, false);
activity = (MainActivity) getActivity();
manager_layout = view.findViewById(R.id.manager_tab_layout);
managerPager = view.findViewById(R.id.managerPager);
parts_list_ex = new ArrayList<>();
parts_list_ex.add(new Battery());
parts_list_ex.add(new Brake());
parts_list_ex.add(new Wiper());
// These are the 2 fragments for the viewpager
progressFragment = new ManagerProgressFragment(parts_list_ex.get(0));
helperFragment = new ManagerHelperFragment(parts_list_ex.get(0));
// since this is also a fragment
manager = getChildFragmentManager();
fragmentList = new ArrayList<>();
fragmentList.add(progressFragment);
fragmentList.add(helperFragment);
adapter = new PartsManagerPagerAdapter(activity, manager, fragmentList);
managerPager.setAdapter(adapter);
manager_layout.setOnTabSelectedListener(tabListener);
return view;
}
这是我的 TabLayout.OnTabSelectedListener tabListener。
TabLayout.OnTabSelectedListener tabListener = new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
int i = tab.getPosition();
Parts selectedParts = parts_list_ex.get(i);
progressFragment = new ManagerProgressFragment(selectedParts);
helperFragment = new ManagerHelperFragment(selectedParts);
fragmentList.clear();
fragmentList.add(progressFragment);
fragmentList.add(helperFragment);
adapter.setFragmentList(fragmentList);
adapter.notifyDataSetChanged(); // I think this is a part that doesn't work.
}
这是我的适配器。
public class PartsManagerPagerAdapter extends FragmentPagerAdapter {
Activity activity;
ArrayList<Fragment> fragmentList;
public PartsManagerPagerAdapter(Activity activity, FragmentManager manager, ArrayList<Fragment> fragmentList) {
super(manager);
this.activity = activity;
this.fragmentList = fragmentList;
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return 2;
}
public void setFragmentList(ArrayList<Fragment> fragmentList) {
this.fragmentList = fragmentList;
}
public ArrayList<Fragment> getFragmentList() {
return this.fragmentList;
}
}
它在创建页面时没有显示错误,但数据没有传输!即使我更改了选项卡,它也会继续显示第一个选项卡的信息。我认为adapter.notifyDataSetChanged()
是行不通的。
我尝试了很多解决方案,但这是我得到的最好的。还有其他方法吗?
解决方案
推荐阅读
- elasticsearch - 将弹性搜索插入我的 ibm cloudant 应用程序
- java - Java 正则表达式:简化正则表达式
- python - 如何在 Linux 上使用 python 更新 docx 文件中的目录?
- angular - 在输入文本中使用管道号
- node.js - 如何在 nodejs 中设置异步/等待计数?
- mediawiki - Mediawiki : 小工具标签没有出现在外观中
- cocoa - 离开桌子时如何停止 NSTableView 拖动图像缩小?
- java - 从其他集群机器更新本地属性
- airflow - 在 Airflow 中使用 `ds` 动态生成任务
- javascript - Webpack - 模块未加载动态导入