You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:RecyclerView中调用startActivityForResult需3个参数,不知如何传入Activity

关于RecyclerView中点击按钮调用startActivityForResult的问题解答

嘿,别慌!我来给你把这个问题掰明白~

首先,startActivityForResult要求的第一个Activity参数,其实就是你当前这个包含RecyclerView的Activity实例——简单说,就是你写RecyclerView所在的那个Activity本身,它负责发起跳转请求,之后也会接收返回的结果。

下面分两种常见场景给你具体的实现方式:

场景1:点击事件逻辑写在包含RecyclerView的Activity里

如果你的点击事件是通过接口回调(比如Adapter里定义点击接口,Activity实现)传到Activity里处理的,那直接传当前Activity的this就行:

// 假设你的Activity叫MainActivity
button.setOnClickListener(v -> {
    // 跳转到目标Activity的Intent
    Intent intent = new Intent(MainActivity.this, TargetActivity.class);
    // 可选:给目标Activity传数据
    intent.putExtra("item_id", 123);
    // 第三个参数是自定义的请求码,比如1001,用来后续区分不同的跳转请求
    startActivityForResult(intent, 1001);
});

场景2:点击事件逻辑写在RecyclerView的Adapter里

Adapter本身没有直接的Activity上下文,所以需要提前把Activity实例传给Adapter:

第一步:修改Adapter的构造方法,接收Activity实例

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
    private Activity mHostActivity;
    private List<YourDataModel> mDataList;

    // 构造方法里传入Activity和数据列表
    public MyRecyclerAdapter(Activity hostActivity, List<YourDataModel> dataList) {
        mHostActivity = hostActivity;
        mDataList = dataList;
    }

    // ... 省略onCreateViewHolder等基础方法

    class ViewHolder extends RecyclerView.ViewHolder {
        Button actionBtn;

        public ViewHolder(View itemView) {
            super(itemView);
            actionBtn = itemView.findViewById(R.id.btn_action);
            
            // 给按钮设置点击事件
            actionBtn.setOnClickListener(v -> {
                Intent intent = new Intent(mHostActivity, TargetActivity.class);
                // 可以传当前点击项的位置或数据
                intent.putExtra("position", getAdapterPosition());
                // 用传入的Activity实例调用startActivityForResult
                mHostActivity.startActivityForResult(intent, 1002);
            });
        }
    }
}

第二步:在Activity里初始化Adapter时传入this

// 在你的Activity中
List<YourDataModel> dataList = ...; // 你的数据列表
MyRecyclerAdapter adapter = new MyRecyclerAdapter(this, dataList);
recyclerView.setAdapter(adapter);

额外提醒:推荐使用新的Activity Result API

其实从AndroidX开始,官方已经不推荐用startActivityForResult了,而是用更灵活的registerForActivityResult,简单示例如下:

// 在Activity的onCreate方法里先注册结果回调
ActivityResultLauncher<Intent> resultLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == Activity.RESULT_OK) {
            Intent returnData = result.getData();
            // 在这里处理目标Activity返回的数据
            String resultStr = returnData.getStringExtra("result_key");
        }
    }
);

// 点击按钮时直接调用launch方法
button.setOnClickListener(v -> {
    Intent intent = new Intent(this, TargetActivity.class);
    resultLauncher.launch(intent);
});

内容的提问来源于stack exchange,提问作者Aniket Anilkumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:36:18