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

如何从另一个Adapter类访问onBindViewHolder中弹出的BottomSheetDialog内的EditText

问题根因
  1. itemView.getRootView().getContext()返回的是Context类型的实例,和DataAdapter_Questions没有继承关系,强制类型转换必然失败。
  2. 你原代码中的etReport是onBindViewHolder点击事件内的局部变量,就算你拿到了DataAdapter_Questions的实例,也无法直接访问这个局部变量。
解决方案(推荐接口回调解耦)

该方案不会产生额外耦合,是Android跨组件通信的常规实现方式。

步骤1:修改第二个Adapter,添加回调接口

针对包含bindData方法的Adapter做如下改造:

public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder> {
    // 定义回调接口
    public interface OnReplyClickListener {
        void onReplyClick(String replyPrefix);
    }

    private OnReplyClickListener onReplyClickListener;

    // 对外暴露设置监听的方法
    public void setOnReplyClickListener(OnReplyClickListener listener) {
        this.onReplyClickListener = listener;
    }

    void bindData(final MovieModel movieModel){
        tvReply.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 点击时触发回调,把要设置的内容传出去
                if (onReplyClickListener != null) {
                    onReplyClickListener.onReplyClick(movieModel.submitted_by + ",");
                }
            }
        });
    }
    // 其他原有代码省略
}

步骤2:修改DataAdapter_Questions,关联回调逻辑

public class DataAdapter_Questions extends RecyclerView.Adapter<DataAdapter_Questions.MyViewHolder> {
    // 把EditText提升为成员变量
    private EditText etReport;
    private Context context;

    // 原有初始化等代码省略,在你初始化第二个Adapter的位置设置回调
    private void initMovieAdapter() {
        MovieAdapter movieAdapter = new MovieAdapter();
        // 设置回调监听
        movieAdapter.setOnReplyClickListener(new MovieAdapter.OnReplyClickListener() {
            @Override
            public void onReplyClick(String replyPrefix) {
                // 直接给成员变量etReport设置内容
                if (etReport != null) {
                    etReport.setText(replyPrefix);
                    // 可选:把光标移到文字末尾方便用户后续输入
                    etReport.setSelection(etReport.getText().length());
                }
            }
        });
        // 其他movieAdapter的设置逻辑省略
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.img_arrow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final BottomSheetDialog dialog3 = new BottomSheetDialog(context);
                dialog3.setContentView(R.layout.bcs_report_bottomsheet);
                // 给成员变量赋值
                etReport = (EditText) dialog3.findViewById(R.id.etReport);
                // 可选:Dialog关闭时清空引用避免内存泄漏
                dialog3.setOnDismissListener(dialog -> etReport = null);
                dialog3.show();
            }
        }); 
    }
    // 其他原有代码省略
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:12:02