RecyclerView控件實現點擊事件跟ListView控件不同,並沒有提供類似setOnItemClickListener()這樣的注冊監聽器方法,而是需要自己給子項具體的注冊點擊事件。
本文的例子是在上一篇文章的基礎上修改的,上一篇文章:android中RecyclerView控件實現瀑布流布局
上一篇文章的代碼,只需要修改NewsAdapter.java,注意紅色部分內容是添加的內容:
package com.example.chenrui.app1; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.example.chenrui.common.News; import java.util.List; import java.util.Random; public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> { private List<News> newsList; public NewsAdapter(List<News> newsList) { this.newsList = newsList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.news_item1,viewGroup,false); final ViewHolder viewHolder = new ViewHolder(view); viewHolder.newsImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = viewHolder.getAdapterPosition(); News news = newsList.get(position); Toast.makeText(v.getContext(), "新聞圖片點擊:你點擊了新聞:" + news.getTitle(), Toast.LENGTH_SHORT).show(); } }); viewHolder.newsTitle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = viewHolder.getAdapterPosition(); News news = newsList.get(position); Toast.makeText(v.getContext(), "新聞標題點擊:你點擊了新聞:" + news.getTitle(), Toast.LENGTH_SHORT).show(); } }); return viewHolder; } @Override public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) { News news = newsList.get(i); viewHolder.newsImage.setImageResource(news.getPic()); ViewGroup.LayoutParams params = viewHolder.newsImage.getLayoutParams(); params.height = params.height + new Random().nextInt(300); viewHolder.newsImage.setLayoutParams(params); viewHolder.newsTitle.setText(news.getTitle()); } @Override public int getItemCount() { return newsList.size(); } static class ViewHolder extends RecyclerView.ViewHolder { ImageView newsImage; TextView newsTitle; public ViewHolder(@NonNull View itemView) { super(itemView); newsImage = itemView.findViewById(R.id.newsPic); newsTitle = itemView.findViewById(R.id.newsTitle); } } }
通過這個例子,點擊新聞圖片和新聞標題都會彈出對應的提示信息。
