Загружаю разные списки с фильмами в лоадере + реализовал простой бесконечный скроллинг. Использую FragmentStatePagerAdapter для отображения разных списков. Проблема наступает когда начинаю переходить между фрагментами - начинает дублироваться загружаемая информация.
1. Как избежать дублирования информации?(повторного запуска загрузчика)
2. Как весь список загруженого?Так как при повороте сохраняется лишь последняя загруженая информация.
public class MovieFragment extends Fragment
implements LoaderManager.LoaderCallbacks<List<Movie>> {
private static final String TAG = "MovieFragment";
private static final String SAVE_CURRENT_PAGE = "current_page";
private static final int START_POSITION = 1;
private final int LOADER_ID = 0;
private RecyclerView mRecyclerView;
private List<Movie> mMovies = new ArrayList<>();
private MovieAdapter mMovieAdapter;
public int mCurrentPage;
private LoaderManager mLoaderManager;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if (savedInstanceState == null){
mCurrentPage = START_POSITION;
}else {
mCurrentPage = savedInstanceState.getInt(SAVE_CURRENT_PAGE);
}
mLoaderManager = getLoaderManager();
startLoading();
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(linearLayoutManager);
EndlessRecyclerViewScrollListener recyclerViewScrollListener = new EndlessRecyclerViewScrollListener(linearLayoutManager) {
@Override
public void onLoadMore() {
mCurrentPage++;
restartLoading();
}
};
mRecyclerView.addOnScrollListener(recyclerViewScrollListener);
setupAdapter();
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(SAVE_CURRENT_PAGE, mCurrentPage);
}
private void setupAdapter(){
if (isAdded()){
mMovieAdapter = new MovieAdapter(mMovies);
mRecyclerView.setAdapter(mMovieAdapter);
}
}
private void startLoading(){
mLoaderManager.initLoader(LOADER_ID, null, this);
}
private void restartLoading(){
mLoaderManager.restartLoader(LOADER_ID, null, this);
}
@Override
public Loader<List<Movie>> onCreateLoader(int id, Bundle args) {
return new MovieLoader(getActivity, mCurrentPage);
}
@Override
public void onLoadFinished(Loader<List<Movie>> loader, List<Movie> data) {
if (data == null || data.isEmpty()){
return;
}
mMovies.addAll(data);
mMovieAdapter.notifyItemInserted(mMovies.size() - 1);
}
public static class MovieLoader extends AsyncTaskLoader<List<Movie>> {
private int mLoadPage;
public MovieLoader(Context context, int loadPage) {
super(context);
mLoadPage = loadPage;
}
@Override
public void onStartLoading(){
forceLoad();
}
@Override
public List<Movie> loadInBackground() {
return new FetchMovie.getMovie(mLoadPage);
}
}
Пример экрана:
Сборка персонального компьютера от Artline: умный выбор для современных пользователей