FragmentStateAdapter onRefreshListener - PullRequest
       4

FragmentStateAdapter onRefreshListener

0 голосов
/ 28 февраля 2020

как я могу реализовать onRefreshListener во фрагментах, если я использую ViewPager (ViewPager 2) с FragmentStateAdapter.

Я нашел только примеры с FragmentPageAdapter.

другой код работает до сих пор, я Я имею в виду пролистывание между фрагментами и отображение списка строк. Просто refre sh (тянуть сверху вниз) не работает. Я просто вижу короткий символ refre sh, а затем он исчезает. В отладчике функции onRefre sh не будут вызываться после действия refre sh.

Это мой код:

основное действие

viewPager = findViewById(R.id.view_pager);
tabLayout = findViewById(R.id.tabs);

viewPager.setAdapter(new ViewPagerAdapter(this, dataManager));
        new TabLayoutMediator(tabLayout, viewPager,
                new TabLayoutMediator.TabConfigurationStrategy() {
                    @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                        tab.setText("Tab " + (position + 1));
                    }
                }).attach();

viewpager

public class ViewPagerAdapter extends FragmentStateAdapter {
    private static final int CARD_ITEM_SIZE = 3;
    private DataManager dataManager;


    public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity, DataManager dataManager) {
        super(fragmentActivity);
        this.dataManager = dataManager;
    }

    @NonNull @Override public Fragment createFragment(int position) {
        Fragment fragment = null;
        if (position == 0)
        {
            fragment = new FragmentA();
            Bundle bundle = new Bundle(2);
            bundle.putString("TOKEN", dataManager.getToken());
            bundle.putString("SERVER_URL", dataManager.getServerURL());
            fragment.setArguments(bundle);
        }
        else if (position == 1)
        {
            fragment = new FragmentB();
        }
        else if (position == 2)
        {
            fragment = new FragmentC();
        }
        return fragment;
    }

    @Override public int getItemCount() {
        return CARD_ITEM_SIZE;
    }

фрагмент

public class FragmentA extends Fragment implements SwipeRefreshLayout.OnRefreshListener{
    private RecyclerView recyclerView;
    private SwipeRefreshLayout swipeLayout;
    private Bundle bundle;
    private ListView mainListView;
    private LibrariesAdapter listAdapter;

    private LibraryDataManager libraryDataManager;
    private RecyclerViewAdapter adapter;
    private GetLibrariesTask getLibrariesTask;

    private String token;
    private String serverUrl;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        bundle = getArguments();
        if (bundle != null) {
            token = bundle.getString("TOKEN");
            serverUrl = bundle.getString("SERVER_URL");
            libraryDataManager = new LibraryDataManager(token, serverUrl);
        } else {
            // ToDo show error or something else
        }
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(
                R.layout.fragment, container, false);

        swipeLayout = rootView.findViewById(R.id.swiperefresh);

        getLibrariesTask = new GetLibrariesTask();
        getLibrariesTask.execute();

        return rootView;
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        mainListView = view.findViewById(android.R.id.list);
        ArrayList<Library> librariesList = new ArrayList<>();
        listAdapter = new LibrariesAdapter(getActivity(), librariesList);
        mainListView.setAdapter(listAdapter);

        swipeLayout.setOnRefreshListener(this);
        swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                getLibrariesTask = new GetLibrariesTask();
                getLibrariesTask.execute();

            }
        });
    }

    private class GetLibrariesTask extends AsyncTask<Void, Void, List<Library>> {
        @Override
        protected List<Library> doInBackground(Void... args) {
            List<Library> libraries = libraryDataManager.getLibraries();
            return libraries;
        }

        @Override
        protected void onPostExecute(List<Library> libraries) {
            listAdapter.clear();
            listAdapter.addAll(libraries);

            listAdapter.notifyDataSetChanged();
            Logger.debug("on refresh2");
//            swipeLayout.setRefreshing(false);
        }
    }
}

...