Добавить элементы в начало recycliewiew

У меня есть 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();
}

Ответ 1

Я бы настаивал на том, чтобы добавить элемент в позицию 0th, которая исходит от pull для обновления, как показано ниже,

mArrayList.add(position, item);
notifyItemInserted(position); 

Ответ 2

Мне также нужно добавить элементы в начало recyclerview (и снизу), но мне нужно сохранить прокрутку, сфокусированную на предыдущем верхнем элементе.

Итак, я просматриваю recyclerview для предыдущего верхнего элемента:

mAdapter.pushFront(items);
mAdapter.notifyItemRangeInserted(0, items.size());
recyclerView.scrollToPosition(items.size() - 1);

Есть ли лучшее решение?

Ответ 3

use list.add(0,items); он добавит новый элемент в начало recyclerview

Ответ 4

Добавьте следующую строку, когда вы установите свой recycliewiew

recyclerView.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,true));

Ответ 5

Вы можете отменить весь список, используя Коллекции:

Collections.reverse(historyitems);

Попробуйте использовать адаптер:

adapter.insert(yourItem, 0);

Попробуйте использовать List:

list.add(0,listItem);

Ответ 6

Рециркулятор не имеет ничего общего с упорядочением элементов. Из приведенного выше кода вы обновляете содержимое и просто показываете, что вы получаете с сервера. Возможно, элементы, возвращенные с сервера, находятся в том порядке, в котором они отображаются. Поэтому проверьте порядок с сервера, что вы получаете.

Ответ 7

в Recyclerview вы также устанавливаете порядок списка. Вы просто устанавливаете свой адаптер, чтобы изменить истину или ложь.

RecyclerView.LayoutManager layoutManager=newLinearLayoutManager(this,LinearLayoutManager.VERTICAL,true);
recyclerView.setLayoutManager(layoutManager);

после установки менеджера компоновки на свой Recyclerview Adapter. И если вы хотите выполнить удаление какого-либо элемента в вашем обзоре переработчика, вам также нужно добавить

layoutManager.setStackFromEnd(true);