为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ibeautiful 2021-10-20 15:25:41
**我将单个 MyAdapter 类用于两个不同的活动(VocabularyActivity 和 PracticeActivity)。我想为两个 Activity 中定义的不同项目 onClick 打开不同的 Intent。我还附上了我的代码。我正在尝试使用项目 onClick 的活动(VocabularyActivity 和 PracticeActivity),但无法实现它。请指导我完成这个。** //MyAdapter.javapackage 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);        }    }}
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-10-20
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

尝试这个


适配器类:


 public abstract 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);


                    itemView.setOnClickListener(new View.OnClickListener() {

                      @Override

                      public void onClick(View v) {

                        onItemClick(getAdapterPosition());

                      }

                    });

                }

            }


            public abstract void onItemClick(int pos);


        }

词汇活动:


MyAdapter mAdapter = new MyAdapter(mList, this) {

            public void onItemClick(int position) {

                // your intent

            }

        };

练习活动:


MyAdapter mAdapter = new MyAdapter(mList, this) {

                public void onItemClick(int position) {

                    // your intent

                }

            };


查看完整回答
反对 回复 2021-10-20
?
隔江千里

TA贡献1906条经验 获得超10个赞

您可以这样做:

首先在您的适配器中声明一些接口并将其分配给 itemClick

并在创建您的适配器时发送您的自定义点击事件


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


    public interface OnItemClickListener {

        void onItemClick(View view, ListItem item);

    }


    private List<ListItem> listItems;

    private Context context;

    private OnItemClickListener mClickListener;



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

        this.listItems = listItems;

        this.context = context;

        this.mClickListener= listener;

    }


    @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,final int position) {


        ListItem listItem=listItems.get(position);

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

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

        if(mClickListener !=null)

            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                listener.onItemClick(v, listItem);

            }

        });

    }





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

        }

    }

}


查看完整回答
反对 回复 2021-10-20
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信