В основном я использую MVP с RxJava в моем проекте, но в связи с отсутствием в Rx версии Youtube API я не использовал мой MVP подход.Progressbar быстро удаляется из endlessrecycleview
В настоящее время я пытаюсь сделать классическую реализацию (используя thread's) endlessrecycleview
, который отображает видео YouTube.
Проблема с моим нынешним подходом заключается в том, что я не могу понять, почему ProgressBar
быстро скрывается от endlessrecyleview
.
private void setupRecyclerView() {
mYoutubeVideoRecyclerView.setAdapter(adapter);
mYoutubeVideoRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mYoutubeVideoRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (true && !(hasFooter())) {
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
//position starts at 0
if (layoutManager.findLastCompletelyVisibleItemPosition()
== layoutManager.getItemCount() - 2) {
Log.d(TAG, "ProgressBar - item INSERTED At index = " + adapter.getItemCount());
adapter.getVideos().add(null);
recyclerView.getAdapter().notifyItemInserted(adapter.getItemCount() - 1);
// TODO: 9/20/16 the bellow 2 lines make the progressbar not being displayed
getYoutubeVideos();
displayDataOrShowMessage();
}
}
}
});
}
...
private void getYoutubeVideos() {
Thread thread = new Thread(new Runnable() {
@Override public void run() {
try {
videoEntries = videoPresenter.getYoutubeVideoList(getActivity());
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
...
private void displayDataOrShowMessage() {
if (videoEntries != null) {
showVideos(videoEntries);
showSelectedVideo((videoEntries.get(0)).getVideoId());
} else {
showMessage(R.string.probleme_connection);
((VideoPlayerFragment) (getActivity()).getFragmentManager().findFragmentByTag("video_player"))
.pause();
}
}
...
public void showVideos(List<VideoEntry> videos) {
Log.d(TAG, "ProgressBar - Adapter data size before adding items = " + adapter.getItemCount());
try {
int size = adapter.getItemCount();
Log.d(TAG, "ProgressBar - item REMOVED from index = " + adapter.getItemCount());
adapter.getVideos().remove(size - 1);//removes footer
adapter.addVideos(videos);
adapter.notifyItemRangeChanged(size - 1, adapter.getItemCount() - size);
} catch (ArrayIndexOutOfBoundsException e) {
adapter.addVideos(videos);
adapter.notifyDataSetChanged();
}
Log.d(TAG, "ProgressBar - Adapter data size after adding items = " + adapter.getItemCount());
mYoutubeVideoRecyclerView.requestFocus();
progressBar.setVisibility(View.INVISIBLE);
infoTextView.setVisibility(View.INVISIBLE);
mYoutubeVideoRecyclerView.setVisibility(View.VISIBLE);
Log.d(TAG, "showVideos -- data is set to list");
}