Я пытаюсь создать ленту новостей, используя просмотры карт, перечисленные в обзоре переработчика.Проблема в том, что, когда я загружаю больше данных с помощью прокрутки, они автоматически прокручиваются вверх страницы.Я хочу знать, как я могу предотвратить это.
Я переопределил onScrolled
метод Recyclerview
onScrollListener
, чтобы загрузить больше данных.Я добавляю новые данные в Arraylist каждый раз с моей функцией fetchingJSON()
.Затем я вызываю функцию setupRecycler()
для установки Recyclerview
с моим обновленным Arraylist.
Итак, допустим, что я загрузил 4 новости в начале, затем прокрутил до конца страницы и загрузил еще 4 новости.Это просто добавление новых данных в Arraylist и повторное создание recyclerview
.Я думаю, поэтому вначале нет большой разницы в установке 8 новостей. Но я не знаю, что делать, чтобы избежать этого.
/*Here I am controlling if user has reached to bottom of page, and calling fetchingJSON() function.*/
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int visibleItemCount = lManager.getChildCount();
int totalItemCount = lManager.getItemCount();
int firstVisibleItemPosition = lManager.findFirstVisibleItemPosition();
if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount
&& firstVisibleItemPosition >= 0
&& totalItemCount >= PAGE_SIZE && !isLoading) {
newsFeed.this.postPage++;
fetchingJSON();
}
}
});
Затем в функции fetchingJSON () я вызываю функцию parseJSONData дляразбор ответа.Я не делаю этого в onResponse, потому что асинхронная операция залпа вызывает некоторые проблемы
private void fetchingJSON() {
isLoading = true;
String url = getResources().getString(R.string.haberUrl);
StringRequest jsonStringRequest = new StringRequest(
Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
parseJSONData(response);
}
},
new Response.ErrorListener() {
@Override
.
.
.
В функции parseJSONData;Я получаю данные из ответа JSON, устанавливая атрибуты моего объекта с этим.Чем добавление моего объекта в Arraylist.Наконец, я вызываю функцию setupRecycler для повторного создания моего Recyclerview с обновленными данными.
public void parseJSONData(String response) {
try {
JSONObject obj = new JSONObject(response);
JSONArray dataArray = obj.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
JSONObject dataobj = dataArray.getJSONObject(i);
haberModel1.setTitle(dataobj.getString("header"));
haberModel1.setUrl(dataobj.getString("picture"));
haberModel1.setId(dataobj.getString("id"));
haberModelArrayList.add(haberModel1);
setupRecycler();
}
} catch (JSONException e) {
Log.d(""+TAG,e.printStackTrace() );
}
}
private void setupRecycler() {
lManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(lManager);
rvAdapter = new RvAdapter(this, haberModelArrayList);
recyclerView.setAdapter(rvAdapter);
isLoading = false;
}