android中RecyclerView控件實現點擊事件


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);
        }
    }
}

 

通過這個例子,點擊新聞圖片和新聞標題都會彈出對應的提示信息。


免責聲明!

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



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