RecyclerView适配器类中使用Intent跳转Activity报错求助
搞定RecyclerView Adapter里的Activity跳转错误!
嘿,我来帮你解决这两个跳转时遇到的问题,咱们逐个拆解:
第一个错误:"PakistaniActivity不是封闭类"
这个问题大概率是你在Adapter里想直接用PakistaniActivity.this当Intent的上下文,但你的Adapter要么是独立的类,要么是PakistaniActivity里的非静态内部类——这两种情况都没法直接拿到PakistaniActivity.this哦。
修复办法:
给你的Adapter加个构造方法,把PakistaniActivity的上下文传进去,之后用这个传入的上下文来创建Intent就行。
第二个错误:"无法解析方法StatrActivity()"
哈哈,这就是个拼写小失误!正确的方法名是startActivity()(首字母是小写的s,你写成大写S还拼错了字母顺序),而且要注意:Adapter本身没有这个方法,必须通过咱们刚才传入的Context对象来调用它。
给你贴个完整的正确代码示例
先看PakistaniActivity的代码:
package com.recycler.hp.navigationbar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; public class PakistaniActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pakistani); RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 把当前Activity的上下文传给Adapter MyAdapter adapter = new MyAdapter(this); recyclerView.setAdapter(adapter); } }
再看Adapter的代码(假设是独立类):
package com.recycler.hp.navigationbar; import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context mContext; // 构造方法接收上下文 public MyAdapter(Context context) { this.mContext = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item_layout, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { // 设置列表项的点击跳转事件 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 用传入的上下文创建Intent,替换成你要跳转的目标Activity Intent intent = new Intent(mContext, YourTargetActivity.class); // 注意这里是mContext调用startActivity,拼写一定要对! mContext.startActivity(intent); } }); } @Override public int getItemCount() { return 10; // 这里改成你实际的列表项数量 } public static class MyViewHolder extends RecyclerView.ViewHolder { TextView textView; public MyViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } } }
最后别忘了一个重要细节!
你要跳转的目标Activity,必须在AndroidManifest.xml里注册哦,不然会跳不动还报错:
<activity android:name=".YourTargetActivity"/>
内容的提问来源于stack exchange,提问作者Usama Hameed
相关产品推荐
相关产品推荐

