如何处理 RecyclerView 项目 onClick ,如果它对多个活动使用单个适配器类

**我将单个 MyAdapter 类用于两个不同的活动(VocabularyActivity 和 PracticeActivity)。我想为两个 Activity 中定义的不同项目 onClick 打开不同的 Intent。我还附上了我的代码。我正在尝试使用项目 onClick 的活动(VocabularyActivity 和 PracticeActivity),但无法实现它。请指导我完成这个。**


 //MyAdapter.java


package com.example.pkjha.recyclerview;


import android.content.Context;

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.TextView;


import java.util.List;


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {


    private List<ListItem> listItems;

    private Context context;


    public MyAdapter(List<ListItem> listItems, Context context) {

        this.listItems = listItems;

        this.context = context;

    }


    @NonNull

    @Override

    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_recyclerview,parent,false);

        return new ViewHolder(v);

    }




   @Override

    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {


        ListItem listItem=listItems.get(position);

        viewHolder.textViewHeader.setText(listItem.getFirstText());

        viewHolder.textViewDescription.setText(listItem.getSecondText());

    }





    @Override

    public int getItemCount() {

        return listItems.size();

    }





    public class ViewHolder extends RecyclerView.ViewHolder

    {

        public TextView textViewHeader,textViewDescription;

        public ViewHolder(@NonNull View itemView) {

            super(itemView);


            textViewDescription=itemView.findViewById(R.id.firstText);

            textViewHeader=itemView.findViewById(R.id.secondText);

        }

    }

}


ibeautiful
浏览 135回答 3
3回答

慕码人8056858

您可以创建一个接口并在两个活动中实现它,然后为这两个活动编写意图代码。然后,您可以使用在适配器构造函数中传递的上下文从适配器调用接口方法。

尚方宝剑之说

尝试这个适配器类:&nbsp;public abstract class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; private List<ListItem> listItems;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; private Context context;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public MyAdapter(List<ListItem> listItems, Context context) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.listItems = listItems;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.context = context;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @NonNull&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_recyclerview, parent, false);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return new ViewHolder(v);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ListItem listItem = listItems.get(position);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; viewHolder.textViewHeader.setText(listItem.getFirstText());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; viewHolder.textViewDescription.setText(listItem.getSecondText());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public int getItemCount() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return listItems.size();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public class ViewHolder extends RecyclerView.ViewHolder {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public TextView textViewHeader, textViewDescription;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public ViewHolder(@NonNull View itemView) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super(itemView);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textViewDescription = itemView.findViewById(R.id.firstText);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textViewHeader = itemView.findViewById(R.id.secondText);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; itemView.setOnClickListener(new View.OnClickListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onClick(View v) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onItemClick(getAdapterPosition());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public abstract void onItemClick(int pos);&nbsp; &nbsp; &nbsp; &nbsp; }词汇活动:MyAdapter mAdapter = new MyAdapter(mList, this) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onItemClick(int position) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // your intent&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; };练习活动:MyAdapter mAdapter = new MyAdapter(mList, this) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onItemClick(int position) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // your intent&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };

隔江千里

您可以这样做:首先在您的适配器中声明一些接口并将其分配给 itemClick并在创建您的适配器时发送您的自定义点击事件public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {&nbsp; &nbsp; public interface OnItemClickListener {&nbsp; &nbsp; &nbsp; &nbsp; void onItemClick(View view, ListItem item);&nbsp; &nbsp; }&nbsp; &nbsp; private List<ListItem> listItems;&nbsp; &nbsp; private Context context;&nbsp; &nbsp; private OnItemClickListener mClickListener;&nbsp; &nbsp; public MyAdapter(List<ListItem> listItems, Context context, OnItemClickListener listener) {&nbsp; &nbsp; &nbsp; &nbsp; this.listItems = listItems;&nbsp; &nbsp; &nbsp; &nbsp; this.context = context;&nbsp; &nbsp; &nbsp; &nbsp; this.mClickListener= listener;&nbsp; &nbsp; }&nbsp; &nbsp; @NonNull&nbsp; &nbsp; @Override&nbsp; &nbsp; public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {&nbsp; &nbsp; &nbsp; &nbsp; View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_recyclerview,parent,false);&nbsp; &nbsp; &nbsp; &nbsp; return new ViewHolder(v);&nbsp; &nbsp; }&nbsp; &nbsp;@Override&nbsp; &nbsp; public void onBindViewHolder(@NonNull ViewHolder viewHolder,final int position) {&nbsp; &nbsp; &nbsp; &nbsp; ListItem listItem=listItems.get(position);&nbsp; &nbsp; &nbsp; &nbsp; viewHolder.textViewHeader.setText(listItem.getFirstText());&nbsp; &nbsp; &nbsp; &nbsp; viewHolder.textViewDescription.setText(listItem.getSecondText());&nbsp; &nbsp; &nbsp; &nbsp; if(mClickListener !=null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; viewHolder.itemView.setOnClickListener(new View.OnClickListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onClick(View v) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; listener.onItemClick(v, listItem);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public int getItemCount() {&nbsp; &nbsp; &nbsp; &nbsp; return listItems.size();&nbsp; &nbsp; }&nbsp; &nbsp; public class ViewHolder extends RecyclerView.ViewHolder&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; public TextView textViewHeader,textViewDescription;&nbsp; &nbsp; &nbsp; &nbsp; public ViewHolder(@NonNull View itemView) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super(itemView);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textViewDescription=itemView.findViewById(R.id.firstText);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textViewHeader=itemView.findViewById(R.id.secondText);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java