怎么在RecyclerView的适配器Adapter实现点击跳转事件(关键找到context上下文)

这个下问题还是在项目中遇到的,查了好多资料才明白,废话不多说,先看一下效果图(一个RecyclerView列表,点击列表中的条目,弹出图提示框,并跳转到另外一个Activity)


https://weibo.com/tv/v/H9YPaiFtz?fid=1034:4323787475205327 

上面链接就是效果。点击是在Adapter里面实现的,刚开始我也是和大家一样不明白为什么写了下面的代码就报错,一直不能正确跳转

  Intent intent=new Intent(this,AnotherActivity.class);
  startActivity(intent);

后来才发现,Adapter是一个java类并不是一个Activity,普通的java类并不能正确获得上下文环境,因为这个类没有在AndroidManifest文件里面注册。所以在进行条状的时候只要需要手动获取上下文环境就可以了,代码如下:

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

    public List<String> mList=null;
    public TextViewAdapter(List<String> mList){
        this.mList=mList;
    }

    static class ViewHolder extends RecyclerView.ViewHolder{

        private TextView textView;
        public ViewHolder(View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.text_item);
        }
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.text_item,parent,false);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        String str=mList.get(position);
        holder.textView.setText(str);

        holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //点击条目弹出提示框
                Toast.makeText(v.getContext(),
                        "你点击的字母是:"+holder.textView.getText(),Toast.LENGTH_LONG).show();
                //点击条目进行跳转到另外一个Activity
                Intent intent=new Intent(v.getContext(),AnotherActivity.class);
                v.getContext().startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }
}

以上就是我自己定义的Adapter里面的代码,跳转的部分注释的很详细了,自己能看懂。至于为什么使用v.getContext()能够获取到上下文环境大家自己查资料,这里不进行讲解。

已经明白的可以留言讲讲你的想法。 

 

 

package com.blog; import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.ViewHolder> { private final ArrayList<String> examples; private final ViewHolderListener viewHolderListener; private final Context context; public SimpleAdapter(Context context, ArrayList<String> examples, ViewHolderListener viewHolderListener) { this.context = context; this.examples = examples; this.viewHolderListener = viewHolderListener; } public void setViewHolderListener(ViewHolderListener viewHolderListener) { } public interface ViewHolderListener { void onItemClicked(View view, int adapterPosition); } @NonNull @Override public SimpleAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_layout, parent, false); return new SimpleAdapter.ViewHolder(view, viewHolderListener); } @Override public void onBindViewHolder(@NonNull SimpleAdapter.ViewHolder holder, int position) { holder.tvContent.setText(examples.get(position)); } @Override public int getItemCount() { return examples.size(); } static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private final TextView tvContent; private final ViewHolderListener viewHolderListener; ViewHolder(View itemView, ViewHolderListener viewHolderListener) { super(itemView); tvContent = itemView.findViewById(R.id.tv_content); this.viewHolderListener = viewHolderListener; itemView.findViewById(R.id.all_layout).setOnClickListener(this); } @Override public void onClick(View view) { if (null != viewHolderListener) { viewHolderListener.onItemClicked(view, getAdapterPosition()); // 点击跳转到新的 Activity Intent intent = new Intent(view.getContext(), BaseActivity.class); view.getContext().startActivity(intent); } } } }这段代码什么意思
最新发布
06-03
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值