Recyclerview не обновляется на фрагменте ViewPager - PullRequest
0 голосов
/ 08 января 2019

У меня есть одно действие с именем MainActivity.Class, которое загружает фрагмент вроде home, explore, comm, you. Во-первых, когда я открываю исследование фрагмента, у него есть пейджер с 4 вкладками, такими как bar, club, dine, rest и т. Д. Все это содержит RecyclerView и загрузку данных из API и показывает список, но при переходе к следующему фрагменту Comm. и обратно из этого фрагмента в список bar, club, rest, dining, не отображающий его отображение полностью пустым.

Для получения дополнительной информации см. Прикрепленное изображение или ссылку

https://drive.google.com/open?id=1APDzpcDe2HQyr_QRFbT4YjlgfGS8n5zw

ExploreFragment

public class ExploreFragment extends BaseFragment {


    public ExploreFragment() {
    }


    public static ExploreFragment newInstance() {
        return new ExploreFragment();
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
        initFrag();
    }

    private void initFrag() {
        exploreBarFragment = ExploreBarFragment.newInstance();
        exploreBarFragment.getMainFragment(ExploreFragment.this);
        exploreClubFragment = ExploreClubFragment.newInstance();
        exploreClubFragment.getMainFragment(ExploreFragment.this);
        exploreDiningFragment = ExploreDiningFragment.newInstance();
        exploreDiningFragment.getMainFragment(ExploreFragment.this);
    }

    MyPagerAdapter adapter;
    public ViewPager pager;
    private PagerSlidingTabStrip tabs;

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_explore, container, false);
        MainActivity.getCurrentFragment = Common.CurrentFragmentType.EXPLORE.getValue();
        ((MainActivity) Objects.requireNonNull(getActivity())).setBottomNavigationVisibility(View.VISIBLE);
        ((MainActivity) Objects.requireNonNull(getActivity())).manageSelectedFragmentMenu(false);
        bindingId(view);
        return view;
    }

    private void bindingId(View view) {
        tabs = view.findViewById(R.id.tabs);
        pager = view.findViewById(R.id.pager);
        setUpPager();
    }

    private void setUpPager() {
        pager.setAdapter(null);
        tabs.setViewPager(null);
        adapter = new MyPagerAdapter(Objects.requireNonNull(getActivity()).getSupportFragmentManager());
        pager.setAdapter(adapter);
        tabs.setViewPager(pager);
        pager.setOffscreenPageLimit(adapter.TITLES.length);
        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {
            }

            @Override
            public void onPageSelected(int i) {
                if (i == 0)
                    exploreBarFragment.onSearch(etExploreTopFilter.getText().toString());
                if (i == 1)
                    exploreClubFragment.onSearch(etExploreTopFilter.getText().toString());
                if (i == 2)
                    exploreDiningFragment.onSearch(etExploreTopFilter.getText().toString());
            }

            @Override
            public void onPageScrollStateChanged(int i) {
            }
        });
    }

    public class MyPagerAdapter extends FragmentPagerAdapter {

        private final String[] TITLES = {getString(R.string.tab_bars_cap), getString(R.string.tab_clubs_cap), getString(R.string.tab_dining_cap)};

        MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return TITLES[position];
        }

        @Override
        public int getCount() {
            return TITLES.length;
        }

        @Override
        public Fragment getItem(int position) {
            if (position == 0) {
                return exploreBarFragment;
            } else if (position == 1) {
                return exploreClubFragment;
            } else if (position == 2) {
                return exploreDiningFragment;
            }
            return null;
        }
    }
}

ExploreBarFragment

public class ExploreBarFragment extends ScrollTabHolderFragment {

    public ExploreBarFragment() {
    }

    public static ExploreBarFragment newInstance() {
        return new ExploreBarFragment();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_explore_bar, container, false);
        ((MainActivity) Objects.requireNonNull(getActivity())).manageSelectedFragmentMenu(false);
        bindingId(view);
        return view;
    }


    private void bindingId(View view) {
        recyclerViewBars = view.findViewById(R.id.recyclerViewBars);


    }

    private void setRecyclerVIewForBars(final GetListByTypeResponse getListResponse) {


        barListData.addAll(getListResponse.getData());
        if (barListData.isEmpty())
            recyclerViewBars.setVisibility(View.GONE);
        else
            recyclerViewBars.setVisibility(View.VISIBLE);
        exploreListingAdpForBars = null;
        recyclerViewBars.setHasFixedSize(false);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerViewBars.setLayoutManager(layoutManager);
        recyclerViewBars.setItemAnimator(new DefaultItemAnimator());
        exploreListingAdpForBars = new ViewAllListingExploreAdapter(recyclerViewBars, barListData, getActivity());
        recyclerViewBars.setAdapter(exploreListingAdpForBars);
        if (onRefreshAdapter != null && indexForBar == 1)
            onRefreshAdapter.onLoadMore();
        exploreListingAdpForBars.setOnLoadMoreListener(new ViewAllListingExploreAdapter.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                if (indexForBar <= getListResponse.getTotalpages() && getListResponse.getTotalpages() > 1) {
                    indexForBar = indexForBar + 1;
                    getListingByPageAndTypeWise(indexForBar, Common.ListByType.BARS.toString());
                }
            }
        });
    }

    public void onEvent(GetListByTypeResponse getListResponse) {
        if (getListResponse.isSuccess()) {
            if (getListResponse.getType().equalsIgnoreCase(Common.ListByType.BARS.toString()))
                setRecyclerVIewForBars(getListResponse);
            swipeBar.setRefreshing(false);
        }
    }
}

enter image description here

1 Ответ

0 голосов
/ 08 января 2019

используйте public class MyPagerAdapter extends FragmentStatePagerAdapter вместо public class MyPagerAdapter extends FragmentPagerAdapter.

обновление Адаптер init, как показано ниже.

adapter = new MyPagerAdapter(Objects.requireNonNull(getActivity()).getChildFragmentManager()); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...