目錄
- 前言
- 一、繼承RecyclerView.Adapter實作adapter
- 1.首先自定義一個item
- 2.在自定義MyAdapter中實作內部類MyViewHolder
- 3.繼承RecyclerView.Adapter
- 4.我們還需要有一個更新資料的方法
- 5.在MainActivity中設定ReyclerView
- 二、點擊事件的設定
- 1.方法一(介面方法)
- 2.方法二
前言
從學習使用來說Listview和RecyclerView基本都可以實作相同的功能,相比較之下Listview更容易實作,但是RecyclerView從使用上來說,增加了設定LayoutMananger可以設定線性、表格、瀑布不同的布局,并且避免了每個item系結控制元件帶來的資源消耗,內部也自定義一些影片效果,方便使用,但實際選擇中,還是要看開發的需求,一、繼承RecyclerView.Adapter實作adapter
1.首先自定義一個item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#A4D3EE">
<ImageView
android:id="@+id/iv"
android:layout_width="88dp"
android:layout_height="88dp"
android:scaleType="fitXY"/>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="你好"
android:textSize="22sp"
android:gravity="center_vertical"
/>
</LinearLayout>
注意:此處的LinerLayout的layout_height要注意不要寫成match_parent,不然就會出現一個item占一整個頁面的尷尬情況,

2.在自定義MyAdapter中實作內部類MyViewHolder
class MyViewHolder extends RecyclerView.ViewHolder{
ImageView mIv;
TextView mTv;
public MyViewHolder(View itemView) {
super(itemView);
mIv=itemView.findViewById(R.id.iv);
mTv=itemView.findViewById(R.id.tv);
}
}
說明:這里進行了item中的控制元件系結,
3.繼承RecyclerView.Adapter
private List<String> dataSource;
private Context mContext;
private RecyclerView mRv;
public MyReyclerViewAdapter(Context context,RecyclerView recyclerView){
mContext=context;
dataSource=new ArrayList<>();
mRv=recyclerView;
}
/**
* 創建實體
*/
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater= LayoutInflater.from(mContext);
View view=inflater.inflate(R.layout.item_layout,parent,false);
MyViewHolder myViewHolder=new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyReyclerViewAdapter.MyViewHolder holder, int position) {
holder.mIv.setImageResource(getIcon(position));
holder.mTv.setText(dataSource.get(position));
}
@Override
public int getItemCount() {
return dataSource.size();
}
說明:這里重寫了三個方法onCreateViewHolder在呼叫 mRecyclerView.setAdapter中初始化沒有被初始化過的item,xml?view?MyViewHolder, onBindViewHolder為每一條item填充資料, getItemCount()獲得item的長度,
4.我們還需要有一個更新資料的方法
public void setDataSource(List<String> dataSource) {
this.dataSource = dataSource;
notifyDataSetChanged();
}
說明:notifyDataSetChanged()方法可以重繪adapter
5.在MainActivity中設定ReyclerView
//線性布局
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
//橫向排列ItemView
//linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
//資料反向展示
linearLayoutManager.setReverseLayout(true);
mRecyclerView.setLayoutManager(linearLayoutManager);
mReyclerViewAdapter=new MyReyclerViewAdapter(this,mRecyclerView);
mRecyclerView.setAdapter(mReyclerViewAdapter);
二、點擊事件的設定
1.方法一(介面方法)
在adpter中
private OnItemClickListener mItemClickListener;
public void setOnclickItem(OnclickItem onclickItem) {
this.onclickItem = onclickItem;
}
public interface OnclickItem{
public void onItemClick(int position);
}
@Override
public void onBindViewHolder(@NonNull @NotNull LinerAdaper.LinerViewHolder holder, int position) {
if(onclickItem!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onclickItem.onItemClick(position);
}
});
}
}
在實體化ReyclerView activity中設定
mAdapter.setOnclickItem(new LinerAdaper.OnclickItem() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this,"我是"+position,Toast.LENGTH_SHORT).show();
}
});
2.方法二
在實體化ReyclerView activity中設定addOnItemTouchListener
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(@NonNull @NotNull RecyclerView rv, @NonNull @NotNull MotionEvent e) {
return false;
}
@Override
public void onTouchEvent(@NonNull @NotNull RecyclerView rv, @NonNull @NotNull MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330361.html
標籤:其他
