Android的RecyclerView的使用總結
來自: http://my.oschina.net/fbf8866/blog/625902
RecycleView是V7包下的,可以說是ListView的升級版,因為ListView是不支持橫向滑動,而RecycleView既支持橫向也支持縱向滑動,使用很方便,但是有一點坑爹的就是沒有條目的點擊事件,需要我們自己來寫
首先Activity的布局如下:
Item的布局我只是用一個簡單的TextView來寫的,所以就不傳圖了;
然后在Activity中的onCreat方法中,獲取到RecyclerView控件,然后設定Layout管理器
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rec);
當然這里的setOrientation也可以設置為horizontal的,這樣就是橫向的
MyAdaper就是適配器,他要繼承的是RecyclerView.Adaper,主要重寫里面的onCreatViewHolder(),onBindViewHolder(),getItemCount()這三個方法,
onCreatViewHolder()就是創建ViewHolder
onBindViewHolder()就是綁定ViewHolder,和數據綁定
getItemCount()就是獲取總的條目數
private class MyAdapter extends RecyclerView.Adapter { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.item, null); Holder holder = new Holder(view); return holder; } @Override public void onBindViewHolder( RecyclerView.ViewHolder holder, final int position) { final Holder h = (Holder) holder; h.setData(position); } @Override public int getItemCount() { return list.size(); } } class Holder extends RecyclerView.ViewHolder { TextView mtv; public Holder(View view) { super(view); mtv = (TextView) view.findViewById(R.id.tv); } public void setData(int position) { mtv.setText(list.get(position).getName()); } }
這樣就可以了,但是有一點就是item沒有條目點擊事件,如果想要用的話,我們只能自己來寫個接口了,因為我的適配器是寫在Activity中的,也就是和OnCreat()在一個類中,所以如下:
首先在全局中寫個接口
public interface onItemClickListener{ void onItemClick(View vi,int position); }
然后在適配器MyAdapter中
private onItemClickListener mOnItem; public void onItemClickListener(onItemClickListener mOnItemClickListener){ this.mOnItem = mOnItemClickListener; }
然后在onBindViewHolder()方法
@Override public void onBindViewHolder( RecyclerView.ViewHolder holder, final int position) { final Holder h = (Holder) holder; h.setData(position); if(mOnItem != null){ h.mtv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItem.onItemClick(h.mtv,position); } }); } }
這就可以了,用的話在new 出適配器的時候設置點擊事件
MyAdapter myAdapter = new MyAdapter(); myAdapter.onItemClickListener(new onItemClickListener() { @Override public void onItemClick(View vi, int position) { Toast.makeText(Priactise.this, "這是" + position, Toast.LENGTH_SHORT).show(); } }); mRecycle.setAdapter(myAdapter);