dimanche 11 décembre 2016

How to update a recyclerview in current tab inside viewpager, which contains 4 tabs with the same reciclerview and adapter

I have a viewpager with 4 tabs (fragments), each tab contains the same fragment with a recyclerview. I want update the checkboxes inside the cardviews of recyclerview, from checkbox click (view bottom of images) that have the main activity. The problem is that no refresh the checkbox of current tab, for example, if I click the checkbox from the first page, refresh the checkbox of the recyclerview of last tab, its very extrange. Maybe a bug?

This is mi pager adapter:

private void setupViewPager(ViewPager viewPager) {
    Adapter adapter = new Adapter(getChildFragmentManager());
    adapter.addFragment(new DiaFragment(), viewPagerTitles[0]);
    adapter.addFragment(new DiaFragment(), viewPagerTitles[1]);
    adapter.addFragment(new DiaFragment(), viewPagerTitles[2]);
    adapter.addFragment(new DiaFragment(), viewPagerTitles[3]);
    viewPager.setAdapter(adapter);
}

class Adapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragments = new ArrayList<>();
    private final List<String> mFragmentTitles = new ArrayList<>();

    public Adapter(FragmentManager fm) {
        super(fm);
    }

    public void addFragment(Fragment fragment, String title) {
        mFragments.add(fragment);
        mFragmentTitles.add(title);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

    @Override
    public int getCount() {
        return mFragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitles.get(position);
    }
}

This is my code to refresh current recyclerview:

 CheckBox CBmarcarTodos = (CheckBox)        getActivity().findViewById(R.id.CBmarcarTodos);
    CBmarcarTodos.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (CBmarcarTodos.isChecked()) {
                ((MonedaSerieAdapter) mRecyclerView.getAdapter()).setChecked(true);
            } else {
                ((MonedaSerieAdapter) mRecyclerView.getAdapter()).setChecked(false);
            }

            mRecyclerView.getAdapter().notifyDataSetChanged();

            ViewPager viewPager = (ViewPager) getActivity().findViewById(R.id.viewpager);
            viewPager.getAdapter().notifyDataSetChanged();
        }
    });

View image

This is the method inside recyclerview adapter to checked/unchecked the checkbox

public void setChecked(Boolean valor) {
    visibleCheckBox = new ArrayList<>();
    for (int i = 0; i < allCheckBox.size(); i++) {
        visibleCheckBox.add(valor);
    }
    notifyDataSetChanged();
}

Aucun commentaire:

Enregistrer un commentaire