RecycleView是android5.0中的控件,是用來替換ListView,GridView的,RecycleView需要自己寫點選事件 二不能像ListView直接設定操作靈活,這樣的新東西肯定是要學習的。下面就學習的結果做總結。
1、要先導入android-support-v7-recycleview.jar包到項目中。
2、建立布局檔案添加控件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</RelativeLayout>
3、在activity中得到該控件,在activity中如果可以确定每個item的高度是固定的,設定這個選項可以提高性 能recyclerview.setHasFixedSize(true); 生成LinearLayoutManager,設定方向
linearlayoutmanager = new LinearLayoutManager(ct);
linearlayoutmanager.setOrientation(oritation);
設定動畫
recyclerview.setItemAnimator(new DefaultItemAnimator());
添加分割線
recyclerview.addItemDecoration();
執行個體化擴充卡
adapter = new RecycleAdapter(ct,list);
設定擴充卡
recyclerview.setAdapter(adapter);
4、定義資料擴充卡和點選事件 自定義監聽事件接口
public interface ItemClickListener
{
public void onItemLongClick(View view, int postion);
public void onItemClick(View view, int postion);
public void onItemSubViewClick(View view, int postion);
}
自定義擴充卡
public class RecycleAdapter extends Adapter<RecycleAdapter.MViewHolder>
{
定義一個RecycleView的擴充卡 *
建立一個類繼承自Adapter<RecycleAdapter.MViewHolder>
實作三個父類方法
onCreateViewHolder 建立新View,被LayoutManager所調用
onBindViewHolder 将資料與界面進行綁定的操作
getItemCount 擷取資料的數量
MViewHolder 自定義的ViewHolder,持有每個Item的的所有界面元素 *
private ItemClickListener itemclicklistener;
private Context ct; private List<String> list;
@Override
public int getItemCount() {
return list.size();
}
public RecycleAdapter(Context ct,List<String> list){
super();
this.ct=ct;
this.list=list;
}
提供activity調用傳入接口實作
public void setItemClickListener(ItemClickListener mItemClickListener)
{
this.itemclicklistener = mItemClickListener;
}
@Override
public MViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
建立子視圖View,将view傳入自定義的ViewHolder
View view = View.inflate(ct,R.layout.item_user_friend_nod,null);
MViewHolder mviewhHolder = new MViewHolder(view);
return mviewhHolder;
}
@Override
public void onBindViewHolder(
final MViewHolder mViewHolder, final int postion) {
綁定子視圖控件資料
mViewHolder.textview.setText("1");
mViewHolder.textview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(itemclicklistener!=null){ itemclicklistener.onItemSubViewClick(mViewHolder.textview, postion);
}
}
});
}
public class MViewHolder extends RecyclerView.ViewHolder {
TextView textview;
public MViewHolder(final View view) {
super(view);
this.textview = (TextView) view.findViewById(R.id.tv_friend_name); view.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(itemclicklistener!=null){ itemclicklistener.onItemLongClick(view,getPosition());
}
return true;
}
});
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(itemclicklistener!=null){
itemclicklistener.onItemClick(view, getPosition());
}
}
});
}
}}
activity調用
public class MainActivity extends Activity {
private RecyclerView recyclerview;
List<String> list;
LinearLayoutManager linearlayoutmanager;
Context ct;
RecycleAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ct = this;
recyclerview = (RecyclerView) findViewById(R.id.recyclerview);
list = new ArrayList<String>();
for (int i = 0; i < 30; ++i) {
list.add("第"+i+1+"位");
}
setRecyclerView(LinearLayoutManager.VERTICAL);
}
public void setRecyclerView(int oritation){
recyclerview.setHasFixedSize(true);
linearlayoutmanager = new LinearLayoutManager(ct);
linearlayoutmanager.setOrientation(oritation); recyclerview.setLayoutManager(linearlayoutmanager);
recyclerview.setItemAnimator(new DefaultItemAnimator());
recyclerview.addItemDecoration(
new ItemDecoration() { });
adapter = new RecycleAdapter(ct,list);
adapter.setItemClickListener(new ItemClickListener() {
@Override
public void onItemSubViewClick(View view, int postion) {
Toast.makeText(ct,"點選了第"+postion+"個内部TextView",0).show();
}
@Override
public void onItemLongClick(View view, int postion) {
Toast.makeText(ct,"長按了第"+postion+"個",0).show();
}
@Override
public void onItemClick(View view, int postion) {
Toast.makeText(ct,"點選了第"+postion+"個",0).show();
}
});
recyclerview.setAdapter(adapter);
}}