首页 > 解决方案 > 通过 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()是行不通的。

我尝试了很多解决方案,但这是我得到的最好的。还有其他方法吗?

标签: androidandroid-viewpager

解决方案


推荐阅读