Android RecyclerView列表项点击跳转对应Activity实现求助
实现RecyclerView项点击跳转对应Activity的步骤
作为安卓新手,别担心,咱们一步步来搞定这个需求,逻辑其实很清晰:
第一步:确保Adapter的点击监听配置正确
你已经在Menu类里实现了ExampleAdapter.OnItemClickListner接口,现在需要补全接口方法,同时给Adapter绑定监听:
- 先在
Menu类里重写onItemClick方法(你的当前代码里应该还没实现这个):
@Override public void onItemClick(int position) { // 点击后的跳转逻辑写在这里,后面详细说明 }
- 然后在
createExampleList方法中,给Adapter设置点击监听。找到这段代码:
mAdapter = new ExampleAdapter(mExampleList); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setAdapter(mAdapter);
在末尾添加一行:
mAdapter.setOnItemClickListener(this);
如果你的ExampleAdapter里还没有setOnItemClickListener方法,需要先给Adapter补充这段代码:
// 在ExampleAdapter类内部定义接口和监听变量 private OnItemClickListner mListener; public interface OnItemClickListner { void onItemClick(int position); } // 设置监听的公共方法 public void setOnItemClickListener(OnItemClickListner listener) { mListener = listener; } // 在ViewHolder的itemView点击事件中触发监听 @Override public void onClick(View v) { if (mListener != null) { int position = getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { mListener.onItemClick(position); } } }
第二步:创建每个菜品对应的Activity和布局
比如Pizza Asterix对应PizzaAsterixActivity,布局使用Pizza_Asterix.xml:
- 右键你的包名 → New → Activity → Empty Activity
- 命名为
PizzaAsterixActivity,选择对应的布局文件Pizza_Asterix.xml(如果布局还没创建,先新建布局文件再选择) - 用同样的方式,给
Pizza Obelix、Pizza Idefix等菜品创建对应的Activity和布局
第三步:编写点击跳转的逻辑
回到Menu类的onItemClick方法,根据点击的菜品名称跳转到对应的Activity:
@Override public void onItemClick(int position) { // 获取当前点击的菜品项 ExampleItem clickedItem = mExampleList.get(position); String dishName = clickedItem.getText1(); // 获取菜品名称,比如"Pizza Asterix" Intent intent; // 根据菜品名称匹配对应的Activity switch (dishName) { case "Pizza Asterix": intent = new Intent(this, PizzaAsterixActivity.class); break; case "Pizza Obelix": intent = new Intent(this, PizzaObelixActivity.class); break; case "Pizza Idefix": intent = new Intent(this, PizzaIdefixActivity.class); break; default: // 遇到未匹配的菜品,给个简单提示 Toast.makeText(this, "暂无对应页面", Toast.LENGTH_SHORT).show(); return; } // (可选)把菜品的价格、描述等数据传递到目标Activity intent.putExtra(EXTRA_URL, clickedItem.getText1()); intent.putExtra(EXTRA_CREATOR, clickedItem.getText2()); intent.putExtra(EXTRA_LIKES, clickedItem.getText3()); // 启动目标Activity startActivity(intent); }
第四步:在目标Activity接收并展示数据(可选)
比如在PizzaAsterixActivity里,你可以获取传递过来的菜品信息并显示在布局上:
public class PizzaAsterixActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.Pizza_Asterix); // 获取从Menu传递过来的数据 Intent intent = getIntent(); String dishName = intent.getStringExtra(Menu.EXTRA_URL); String price = intent.getStringExtra(Menu.EXTRA_CREATOR); String description = intent.getStringExtra(Menu.EXTRA_LIKES); // 把数据显示到布局的控件上(假设布局里有对应的TextView) TextView tvName = findViewById(R.id.tv_dish_name); TextView tvPrice = findViewById(R.id.tv_price); TextView tvDesc = findViewById(R.id.tv_description); tvName.setText(dishName); tvPrice.setText(price); tvDesc.setText(description); } }
小提醒
- 确保新建的Activity都已在
AndroidManifest.xml中注册(Android Studio创建Activity时会自动完成注册,不过可以检查确认) - 如果菜品数量很多,switch-case会显得繁琐,后期可以用
HashMap<String, Class<?>>做映射表简化代码,新手先从switch-case入手就好
内容的提问来源于stack exchange,提问作者Feike Falkena
相关产品推荐
相关产品推荐

