實現RecyclerView點選事件的探索-----微風android新手-------
阿新 • • 發佈:2019-01-09
RecyclerView是一個官方介紹RecyclerView為在有限的視窗展現大量資料的控制元件。擁有類似功能的控制元件有ListView、GridView的控制元件,是support:recyclerview-v7中提供的控制元件。
RecyclerView的使用就不說了,說說RecyclerView中的item的點選事件怎麼搞?
做法是在介面卡中實現,並封裝方法暴露給外部呼叫
1.新建一個介面,用介面回撥的方法實現item的點選事件處理
public interface OnItemClickListener { public void onItemClick(View view, int postion); }
2.外部宣告我們的定義的介面
private OnItemClickListener mClickListener;//自定義的介面
3.在Adapter中的onCreateViewHolder()方法中返回ViewHolder的同時,返回一個OnItemClickListener
/*在這裡對item進行繫結,並用View物件去接收它並作為返回*/ @Override public CityAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.location_city_option_item, parent, false); return new ViewHolder(view, mClickListener); }
4.在標準化的ViewHolder內部類中做自定義介面的宣告,對item設定監聽事件
/*在ViewHolder中定義物件並通過findviewbyid()例項化繫結控制元件*/ public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView cityName; private OnItemClickListener mListener;// 宣告自定義監聽介面 /*建構函式中新增自定義的介面的引數*/ public ViewHolder(View itemView, OnItemClickListener listener) { super(itemView); mListener = listener; itemView.setOnClickListener(this); // 為ItemView新增點選事件 cityName = itemView.findViewById(R.id.city_option_tv); } @Override public void onClick(View v) { mListener.onItemClick(v, getLayoutPosition()); } }
值得注意的是getPosition()被廢棄後,官方提供了兩個新的方法
// getpostion(已經廢棄)為Viewholder自帶的一個方法,用來獲取RecyclerView當前的位置,將此作為引數,傳出去 //getAdapterPosition 返回資料在Adapter中的位置(也許位置的變化還未來得及重新整理到佈局中),當使用Adapter的時候考慮使用 //getLayoutPosition 返回佈局中最新的計算位置,和使用者所見到的位置一致,當做使用者輸入(例如點選事件)的時候考慮使用
5.定義方法,給外部呼叫
/*item的點選事件處理,這裡採用了介面回撥的方法實現*/
/*將該方法暴露給外部,便於外部呼叫*/
public void setOnItemClickListener(OnItemClickListener listener) {
this.mClickListener = listener;
}
6.外部如何呼叫
/*RecyclerView的相關配置*/
RecyclerView recyclerView = view.findViewById(R.id.recyler_view_garage);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
GarageAdapter adapter = new GarageAdapter(getContext(),garageList);
recyclerView.setAdapter(adapter);
//這裡是item的點選事件
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, int postion) {
ToastUtil.showMessage(getContext(),"你點選了"+postion);
}
});
以上就是實現點選事件的方法,這是我的新手學習記錄,希望多多指教