安卓開發:RecyclerView的使用(三)
阿新 • • 發佈:2018-11-12
其實我以前也有一個每天聊到深夜的人。
檢視文章:
RecyclerView的點選事件
我們來具體學習一下如何在 RecyclerView 中註冊點選事件,修改 FruitAdapter 中的代 碼,如下所示:
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { private List<Fruit> mFruitList; static class ViewHolder extends RecyclerView.ViewHolder { View fruitView; ImageView fruitImage; TextView fruitName; public ViewHolder(View view) { super(view); fruitView = view; fruitImage = (ImageView) view.findViewById(R.id.fruit_image); fruitName = (TextView) view.findViewById(R.id.fruit_name); } } public FruitAdapter(List<Fruit> fruitList) { mFruitList = fruitList; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout. fruit_item, parent, false); final ViewHolder holder = new ViewHolder(view); holder.fruitView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Fruit fruit = mFruitList.get(position); Toast.makeText(v.getContext(), "you clicked view " + fruit.getName(), Toast.LENGTH_SHORT).show(); } }); holder.fruitImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Fruit fruit = mFruitList.get(position); Toast.makeText(v.getContext(), "you clicked image " + fruit.getName(), Toast.LENGTH_SHORT).show(); } }); return holder; } ... }
我們先是修改了 ViewHolder,在 ViewHolder 中添加了 fruitView 變數來儲存子項最外層 佈局的例項,然後在 onCreateViewHolder()方法中註冊點選事件就可以了。這裡分別為最外層 佈局和 ImageView 都註冊了點選事件,RecyclerView 的強大之處也在這裡,它可以輕鬆實現子項 中任意控制元件或佈局的點選事件。我們在兩個點選事件中先獲取了使用者點選的 position,然後通過 position 拿到相應的 Fruit 例項,再使用 Toast 分別彈出兩種不同的內容以示區別。
現在重新執行程式碼,並點選香蕉的圖片部分,效果如圖 3.37 所示。可以看到,這時觸發了 ImageView 的點選事件。
然後再點選菠蘿的文字部分,由於 TextView 並沒有註冊點選事件,因此點選文字這個事件 會被子項的最外層佈局捕獲到。
轉載宣告:此篇文章轉載自郭霖作者寫的《第一行程式碼》書中的章節,因為此章節對我幫助很大,並且寫的非常詳細,以便之後方便查閱。特在此做轉載宣告。