Ответ 1
Я бы настаивал на том, чтобы добавить элемент в позицию 0th
, которая исходит от pull для обновления, как показано ниже,
mArrayList.add(position, item);
notifyItemInserted(position);
У меня есть Recyclerview в моей деятельности. когда я вытащил его, он загрузит новые предметы для просмотра в корзине. Теперь мне нужно реализовать pull, чтобы обновить концепцию до моего recyclerview. Я сделал это. Но когда я вызываю pull to refresh, я получаю новые предметы и добавляю их в корзину. Мне нужно добавить новые элементы в начало моего просмотра. Как добавить новые загруженные элементы в верхнее положение просмотра recycler.
public void refreshing() throws IllegalStateException{
new AsyncTask<String, Void, Void>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(String... arg0) {
final List<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("id", sPreferences.getString("ID", "")));
final HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 30000);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);
HttpPost httpPost = new HttpPost(Config.requestpatienthistory);
httpPost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
try {
httpPost.setEntity(new UrlEncodedFormEntity(list));
} catch (IOException e) {
e.printStackTrace();
}
try {
HttpResponse response = httpClient.execute(httpPost);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String json = reader.readLine();
JSONObject jsonObj = new JSONObject(json);
if (jsonObj.has("control")) {
JSONArray feedArray = jsonObj.getJSONArray("control");
for (int i = 0; i < feedArray.length(); i++) {
JSONObject feedObj = (JSONObject) feedArray.get(i);
final Historyitem item = new Historyitem();
if (feedObj.has("Reported_Time")) {
item.setReported_Time(feedObj.getString("Reported_Time"));
}
historyitems.add(item);
}
} else {
System.out.println("" + "no patients");
}
} catch (SocketException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressBar.setVisibility(View.GONE);
historyadapter = new HistoryRecycleListAdapter(getActivity(), getActivity(), historyitems);
hisrecyclerview.setAdapter(historyadapter);
}
}.execute();
}
Я бы настаивал на том, чтобы добавить элемент в позицию 0th
, которая исходит от pull для обновления, как показано ниже,
mArrayList.add(position, item);
notifyItemInserted(position);
Мне также нужно добавить элементы в начало recyclerview (и снизу), но мне нужно сохранить прокрутку, сфокусированную на предыдущем верхнем элементе.
Итак, я просматриваю recyclerview для предыдущего верхнего элемента:
mAdapter.pushFront(items);
mAdapter.notifyItemRangeInserted(0, items.size());
recyclerView.scrollToPosition(items.size() - 1);
Есть ли лучшее решение?
use list.add(0,items);
он добавит новый элемент в начало recyclerview
Добавьте следующую строку, когда вы установите свой recycliewiew
recyclerView.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,true));
Вы можете отменить весь список, используя Коллекции:
Collections.reverse(historyitems);
Попробуйте использовать адаптер:
adapter.insert(yourItem, 0);
Попробуйте использовать List:
list.add(0,listItem);
Рециркулятор не имеет ничего общего с упорядочением элементов. Из приведенного выше кода вы обновляете содержимое и просто показываете, что вы получаете с сервера. Возможно, элементы, возвращенные с сервера, находятся в том порядке, в котором они отображаются. Поэтому проверьте порядок с сервера, что вы получаете.
в Recyclerview вы также устанавливаете порядок списка. Вы просто устанавливаете свой адаптер, чтобы изменить истину или ложь.
RecyclerView.LayoutManager layoutManager=newLinearLayoutManager(this,LinearLayoutManager.VERTICAL,true);
recyclerView.setLayoutManager(layoutManager);
после установки менеджера компоновки на свой Recyclerview Adapter. И если вы хотите выполнить удаление какого-либо элемента в вашем обзоре переработчика, вам также нужно добавить
layoutManager.setStackFromEnd(true);