将项目添加到recyclerview的顶部

时间:2015-08-14 06:13:40

标签: android android-recyclerview

我的活动中有一个Recyclerview。当我下拉它将加载新项目回收视图。 现在我需要实现pull来刷新概念到我的recyclerview。我做到了。但是当我调用pull来刷新时,我正在获取新项目并添加到回收视图底部。我需要在循环视图的顶部添加新项目。如何将新加载的项目添加到回收站视图的顶部位置。

 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();
}

8 个答案:

答案 0 :(得分:23)

我会坚持要在0th位置添加项目,该项目来自拉动刷新,如下所示

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

答案 1 :(得分:2)

我还需要在recyclerview(和底部)的前面添加项目,但我需要将滚动重点放在前一个顶部项目上。

所以我将recyclelerview滚动到上一个顶级项目:

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

有更好的解决方案吗?

答案 2 :(得分:1)

使用list.add(0,items);它会将新项目添加到recyclerview

之上

答案 3 :(得分:1)

在Recyclerview中,您还可以设置列表顺序。您只需将适配器设置为true或false即可。

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

在将布局管理器设置为Recyclerview Adapter之后。 而且,如果您要在recyclerview上删除某些项目视图,还需要添加

layoutManager.setStackFromEnd(true);

答案 4 :(得分:0)

您可以使用收藏集反转整个列表:

Collections.reverse(historyitems);

尝试使用适配器:

adapter.insert(yourItem, 0);

尝试使用List:

list.add(0,listItem);

答案 5 :(得分:0)

Recycler视图与项目的排序无关。从上面的代码中,您可以刷新内容并只显示从服务器获取的内容。可能是服务器返回的项目按其显示的顺序排列。因此,请检查服务器上的订单。

答案 6 :(得分:0)

设置recyclerview时添加以下行

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

答案 7 :(得分:0)

在xml中进行操作,不再需要LinearLayoutManager代码

<android.support.v7.widget.RecyclerView
        android:id="@+id/recordItemList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:clipToPadding="false"
        android:scrollbars="none"
        app:layoutManager="LinearLayoutManager"
        app:stackFromEnd="true"
        app:reverseLayout="true"/>