Android新控制項RecyclerView淺析及上拉和下拉重新整理

來源:互聯網
上載者:User

標籤:android   recyclerview   控制項   

概述:

RecyclerView是android-support-v7-21版本中新增的一個Widgets,RecyclerView是ListView的升級版本,更加先進和靈活。在以後的開發中我們就可以直接使用RecyclerView來替換ListView。


特點介紹:

1. 可橫向展示

2. 消除錯位問題

3. 標準化了ViewHolder


橫向:

private void initHorizaontal(List<ItemModel> models) {RecyclerView recyclerView = (RecyclerView) findViewById(R.id.activity_main_horizontal_recyclerview);LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);recyclerView.setLayoutManager(layoutManager);RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainActivity.this, models);recyclerView.setAdapter(adapter);}

豎向:

public void initVertical(List<ItemModel> models) {RecyclerView recyclerView = (RecyclerView) findViewById(R.id.activity_main_vertical_recyclerview);LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);layoutManager.setOrientation(LinearLayoutManager.VERTICAL);recyclerView.setLayoutManager(layoutManager);RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainActivity.this, models);recyclerView.setAdapter(adapter);}

Adapter的變化:

Google在對RecyclerView的改進中還為我們解決了一個初學者比較頭痛的問題:錯位。

public class RecyclerViewAdapter extends RecyclerView.Adapter<ViewHolder> {private List<ItemModel> mList = null;private Context mContext = null;private LayoutInflater mInflater = null;public RecyclerViewAdapter(Context context, List<ItemModel> list) {mContext = context;mList = list;mInflater = LayoutInflater.from(mContext);}@Overridepublic int getItemCount() {if (mList != null) {return mList.size();}return 0;}@Overridepublic void onBindViewHolder(ViewHolder viewHolder, int position) {((ItemViewHolder)viewHolder).mLabelTextView.setText(mList.get(position).getLabel());}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup viewGroup, int arg1) {View view = mInflater.inflate(R.layout.list_item, viewGroup, false);ItemViewHolder holder = new ItemViewHolder(view);holder.mLabelTextView = (TextView) view.findViewById(R.id.list_item_textview);return holder;}public static class ItemViewHolder extends ViewHolder{        public ItemViewHolder(View itemView) {            super(itemView);        }                private TextView mLabelTextView = null;    }}


上拉或下拉重新整理:

對於下拉重新整理,Android自身有一個控制項SwipeRefreshLayout已經有所實現。我們把SwipeRefreshLayout包在RecyclerView的外面,然後再設定其綁定到一個OnRefreshListener上。


布局:

<android.support.v4.widget.SwipeRefreshLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/swipe_refresh_widget"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <android.support.v7.widget.RecyclerView        android:id="@android:id/list"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:cacheColorHint="@null"        android:scrollbars="vertical" /></android.support.v4.widget.SwipeRefreshLayout>


監聽:

@Override    public void onRefresh() {        handler.sendEmptyMessageDelayed(0, 3000);    }

而對於上拉重新整理,我們則是自訂一個FooterView和線程來進行的。

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {            @Override            public void onScrollStateChanged(RecyclerView recyclerView,                    int newState) {                super.onScrollStateChanged(recyclerView, newState);                if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == adapter.getItemCount()) {                    handler.sendEmptyMessageDelayed(1, 3000);                }            }            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();            }        });


相關源碼下載:

RecyclerView初步使用

RecyclerView的上拉和下拉重新整理


Android新控制項RecyclerView淺析及上拉和下拉重新整理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.