踏平RecyclerView使用的各种坑,跟ListView和GridView说拜拜
RecyclerView是谷歌推出的新View,使用和listview差不多。
在此之前推薦一本書:跟著敲一遍你能從中級變高級,從習(xí)慣eclipse變成使用Android studio大神。
但是RecyclerView對于初學(xué)者還是有點難度,下面以最簡短的代碼讓你一眼明白并牢記RecyclerView的使用方法
mRecyclerView = findViewById(R.id.id_recyclerview); //設(shè)置布局管理器 mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //設(shè)置adapter mRecyclerView.setAdapter(adapter) //設(shè)置Item增加、移除動畫 mRecyclerView.setItemAnimator(new DefaultItemAnimator()); //添加分割線 mRecyclerView.addItemDecoration(new MyItemDecoration(this, MyItemDecoration.HORIZONTAL));
只有這四個方法簡單嗎??、
特別需要做的是寫自己的adapter
使用步驟:
①創(chuàng)建RecyclerView 對象
②設(shè)置適配器adapter
完成了。。。。
所以只要會寫adapter就會用RecyclerView了
最簡單的使用demo可參考http://blog.csdn.net/gfg156196/article/details/51727783
使用中的過程總結(jié):
①導(dǎo)包,請導(dǎo)入RecyclerView的包,不要選擇V7包。
compile 'com.android.support:recyclerview-v7:25.0.1'
②創(chuàng)建自己的adapter
/*** Created by yugu88 on 2016/11/29.15:14* 注意點:必須使用泛型Adapter<RecHoder>*/public class RecAdapter extends RecyclerView.Adapter<RecHoder> {Activity content;String[] menu_text;public RecAdapter(Activity content, String[] menu_text) {this.content=content;this.menu_text=menu_text;}/*** @return RecHoder 修改此返回類型為自己定義的ViewHolder*/@Overridepublic RecHoder onCreateViewHolder(ViewGroup parent, int viewType) {LayoutInflater layoutInflater=LayoutInflater.from(content);View view=layoutInflater.inflate(R.layout.adapter_listview_menu, parent, false);return new RecHoder(view);//創(chuàng)建自己的ViewHolder并返回此對象}/*** @param holder 修改此ViewHolder的類型為自己定義的RecHoder*/@Overridepublic void onBindViewHolder(RecHoder holder, final int position) {holder.tv_menu.setText(menu_text[position]);Log.e("getItemCount",position+"");holder.tv_menu.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {}});}@Overridepublic int getItemCount() {return menu_text.length;}}
③創(chuàng)建自己的ViewHolder
/*** Created by yugu88 on 2016/11/29.15:52*/public class RecHoder extends RecyclerView.ViewHolder {public TextView tv_menu;public RecHoder(View itemView) {super(itemView);tv_menu=(TextView) itemView.findViewById(R.id.tv_menu);} }
④在Activity中使用RecyclerView
listview_menu=(RecyclerView) findViewById(R.id.listview_menu); listview_menu.setLayoutManager(new LinearLayoutManager(this));// 此句最最重要LinearLayoutManager就是listview類型的 //listview_menu.setLayoutManager(new GridLayoutManager(this,4));// 此為GridView類型的視圖 4列 //創(chuàng)建adapter對象 RecAdapter recAdapter=new RecAdapter(this, menu_text); //設(shè)置adapter listview_menu.setAdapter(recAdapter);
setLayoutManager();的參數(shù)有如下幾種:
LinearLayoutManager 線性管理器。支持橫向、縱向。
GridLayoutManager 網(wǎng)格布局管理器StaggeredGridLayoutManager 瀑布就式布局管理器
如果需要分割線:
// 第二個參數(shù)是橫線或者豎線的意思 listview_menu.addItemDecoration(new RecycleViewDivider(this, LinearLayoutManager.HORIZONTAL));
可以在setAdapter(recAdapter)之前或者之后都可以。
LinearLayoutManager.HORIZONTAL 表示分割線是橫著畫的,一般用在垂直滾動的listview。如下。
addItemDecoration該方法的參數(shù)為RecyclerView.ItemDecoration,該類為抽象類,我們需要繼承它寫一個自己的類。
它的源碼很短,如下:
public static abstract class ItemDecoration {public void onDraw(Canvas c, RecyclerView parent, State state) {onDraw(c, parent);}@Deprecatedpublic void onDraw(Canvas c, RecyclerView parent) {}public void onDrawOver(Canvas c, RecyclerView parent, State state) {onDrawOver(c, parent);}@Deprecatedpublic void onDrawOver(Canvas c, RecyclerView parent) {}@Deprecatedpublic void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {outRect.set(0, 0, 0, 0);}public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),parent);}}
方法都沒有實現(xiàn),我們繼承它實現(xiàn)自己的方法即可。
注意:onDraw方法,使用帶有State state參數(shù)的方法。。
具體的畫線的類如何寫可以參考http://www.cnblogs.com/huolongluo/p/5879292.html
如果你實在是懶得寫分割線,可以直接把別人的分割線類拿來使用。。。
總結(jié)
以上是生活随笔為你收集整理的踏平RecyclerView使用的各种坑,跟ListView和GridView说拜拜的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android studio导入另外一个
- 下一篇: Android 3D开发,OpenGL