Передача данных с помощью TabLayout в ViewPager (Adapter: FragmentPagerAdapter) - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь показать ViewPager от TabLayout. Каждая вкладка представляет класс деталей. То есть 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() не работает.

Я пробовал много решений, но это лучшее, что я получил. Есть ли другой способ?

...