Я знаю, что это было задано раньше, но я не выигрываю. У меня есть набор данных на моем веб-сервере с тысячами записей, и я хочу заполнить список recyclerview 20 за раз. Как загрузить данные из массива? Я не думаю, что загрузка одной тысячи на ходу - это оптимальный выбор, потому что он требует много времени и также использует много данных. У меня есть следующий код, который позволяет мне определить, достиг ли я конца текущего списка, используя статические данные, но я не знаю, как я должен реализовать задачу Async.Endless RecyclerView Scroll
Вот мой свиток Слушатель:
public abstract class EndlessRecyclerScroll extends RecyclerView.OnScrollListener {
public static String TAG = EndlessRecyclerScroll.class.getSimpleName();
private int previousTotal = 0;
private Boolean loading = true;
private int visibleThreshold = 5;
int firstVisibleItem, visibleItemCount,totalItemCount;
private int current_page = 1;
private LinearLayoutManager linearLayoutManager;
public EndlessRecyclerScroll(LinearLayoutManager linearLayoutManager){
this.linearLayoutManager = linearLayoutManager;
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy){
super.onScrolled(recyclerView,dx,dy);
visibleItemCount = recyclerView.getChildCount();
totalItemCount = linearLayoutManager.getItemCount();
firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
if(loading){
if(totalItemCount > previousTotal){
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading
&& (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
// End has been reached
// Do something
current_page++;
onLoadMore(current_page);
loading = true;
}
}
public abstract void onLoadMore(int current_page);
}
Это моя основная деятельность, что малообъемных сборных грузов на статические данные:
public class MainActivity extends AppCompatActivity {
List<String> list;
RecyclerView recyclerView;
LinearLayoutManager linearLayoutManager;
RVAdapter rvAdapter;
private static int current_page = 1;
private int ival = 1;
private int loadLimit = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = new ArrayList<>();
loadData(current_page);
setRecyclerView();
recyclerView.setOnScrollListener(new EndlessRecyclerScroll(linearLayoutManager) {
@Override
public void onLoadMore(int current_page) {
loadMoreData(current_page);
}
});
}
void setRecyclerView(){
recyclerView = (RecyclerView)findViewById(R.id.itemRV);
recyclerView.setHasFixedSize(true);
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
rvAdapter = new RVAdapter(list);
recyclerView.setAdapter(rvAdapter);
}
void loadData(int current_page){
for (int i = ival; i <= loadLimit; i++) {
list.add("Item "+i);
ival++;
}
}
private void loadMoreData(int current_page) {
// I have not used current page for showing demo, if u use a webservice
// then it is useful for every call request
loadLimit = ival + 10;
for (int i = ival; i <= loadLimit; i++) {
list.add("Item "+i);
ival++;
}
rvAdapter.notifyDataSetChanged();
}
Я последовал за руководство от сюда, чтобы достичь этого: http://android-pratap.blogspot.com/2015/01/endless-recyclerview-onscrolllistener.html?m=1
Помогите? Пожалуйста,