Android關於RecycleView中的Adapter詳解


什么是Adapter?

Adapter 對象充當AdapterView視圖和底層數據之間的橋梁。適配器提供對數據項的訪問。Adapter 還負責為android.view.View數據集中的每個項目制作一個。
簡單來說,Adapter提供了一個將其他View嵌套進RecycleView的方法,使每個RecycleViewitem遵循自定義的視圖。

Adapter的使用

定義 Adapter 時,您需要替換三個關鍵方法:

  • onCreateViewHolder():每當 RecyclerView 需要創建新的 ViewHolder 時,它都會調用此方法。此方法會創建並初始化 ViewHolder 及其關聯的 View,但不會填充視圖的內容,因為 ViewHolder 此時尚未綁定到具體數據。

  • onBindViewHolder():RecyclerView 調用此方法將 ViewHolder 與數據相關聯。此方法會提取適當的數據,並使用該數據填充 ViewHolder 的布局。例如,如果 RecyclerView 顯示的是一個名稱列表,該方法可能會在列表中查找適當的名稱,並填充 ViewHolder 的 TextView widget。

  • getItemCount():RecyclerView 調用此方法來獲取數據集的大小。例如,在通訊簿應用中,這可能是地址總數。RecyclerView 使用此方法來確定什么時候沒有更多的列表項可以顯示。

下面是一個典型的簡單 Adapter示例,該 Adapter主要接受初始化時傳來的List<user>數據,同時接受一個自定義點擊事件接口。為了使RecycleView顯示List的內容,需要將List大小及內容傳入Adapter來顯示。

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

	//定義所需傳入的參數
    private List<User> users;
    private Context context;
    private OnItemClickListener listener;

	//初始化Adapter時傳入相關參數
    public CustomAdapter(List<User> users,Context context,OnItemClickListener listener) {
        this.users = users;
        this.context = context;
        this.listener = listener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
		//使每一個RecycleView中的視圖都顯示為R.layout.item的樣式
        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false));
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
		//顯示當前時間
        Date date = new Date();
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		//設置顯示的文本
        holder.textView.setText(users.get(position).content);
        holder.tv_1.setText(ft.format(date));
		//設置每個item長按事件
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                listener.onLongClick(position,users.get(position));
                return false;
            }
        });
		//設置點擊事件
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onClick(position,users.get(position));
            }
        });
    }

    @Override
    public int getItemCount() {
		//返回List的大小,使其全部顯示
        return users.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{

        private TextView textView,tv_1;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
			//定位要設置的控件
            textView = itemView.findViewById(R.id.tv_content);
            tv_1 = itemView.findViewById(R.id.tv_date);
        }
    }

    public interface OnItemClickListener{
		//在初始化時獲得事件
        void onClick(int pos,User user);
        void onLongClick(int pos,User user);
    }
}

總項目地址請看:記事本app


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM