【Android】16.0 UI開發(七)——列表控制元件RecyclerView的點選事件實現
1.0 在各佈局的基礎上,修改ProvinceAdapter.java的程式碼:
package com.example.recyclerviewtest; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import java.util.List; public class ProvinceAdapter extends RecyclerView.Adapter<ProvinceAdapter.ViewHolder> { private List<Province> mProvinceList; private int resourceId; //定義一個內部類ViewHolder,該類繼承自RecyclerView.ViewHolder。 //需要傳入一個View引數,通常是RecyclerView子項最外層佈局 static class ViewHolder extends RecyclerView.ViewHolder { //ImageView provinceImage; TextView provinceName; View provinceView; public ViewHolder(View view) { super(view); provinceView = view; provinceName = (TextView) view.findViewById(R.id.province_name); } } //該建構函式作用是將資料來源賦值給一個全域性變數mProvinceList public ProvinceAdapter(List<Province> provinceList) { mProvinceList = provinceList; } //由於ProvinceAdapter是繼承自RecyclerView.Adapter, //所以需要重寫三個方法: // onCreateViewHolder() :建立ViewHolder例項,將區域性載入進來 //onBindViewHolder() :對RecyclerView子項資料進行賦值 //getItemCount() @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.province_item, viewGroup, false); final ViewHolder holder = new ViewHolder(view); holder.provinceView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Province province = mProvinceList.get(position); Toast.makeText(v.getContext(), "你點選了項" + province.getName(), Toast.LENGTH_SHORT).show(); } }); return holder; } @Override public void onBindViewHolder(ViewHolder holder, int position ) { Province province = mProvinceList.get(position); holder.provinceName.setText(province.getName()); } @Override public int getItemCount() { return mProvinceList.size(); } }
2.0 列表控制元件RecyclerView沒有提供直接可以呼叫的註冊監聽事件,需要我們給子項具體的View去註冊點選事件。優點是可以在某一個子項中,點選其中的某個圖片、欄位、按鈕等,而不像setOnItemClickListener()方法那樣只能選擇子項本身。
3.0 之所以這麼短,是因為之前寫的內容做鋪墊:
連結:【Android】15.0 UI開發(六)——列表控制元件RecyclerView的網格佈局排列實現
連結:【Android】14.0 UI開發(五)——列表控制元件RecyclerView的瀑布佈局排列實現
連結:【Android】13.0 UI開發(四)——列表控制元件RecyclerView的橫向佈局排列實現
END