为了账号安全,请及时绑定邮箱和手机立即绑定

当用户单击同一项目的按钮时,如何从 Recyclerview 项目的 EditText 获取文本?

当用户单击同一项目的按钮时,如何从 Recyclerview 项目的 EditText 获取文本?

慕码人2483693 2021-06-16 17:57:28
我正在设计一个 RecyclerView 列表。Recyclerview 的每一项都包含一个 LinearLayout。这个 LinearLayout 包含两个视图,第一个是 EditText,第二个是 Button。当用户点击按钮时,它会触发一个 onclick 事件。从 onClick 侦听器,我需要获取 EditText 的内容。当用户点击另一个同级视图时,我找不到访问同级视图内容的方法。我的问题不是“如何将单击侦听器设置为适配器内的按钮”。大多数人回答了如何将 onClick 侦听器设置为 recyclerview 项目内的按钮。我的问题有点不同,当我在从按钮触发的 onClick 方法中时,我将如何访问作为按钮兄弟的编辑文本。每个项目都有一个编辑文本,所以当我点击一个按钮时,我将如何找到正确的编辑文本?例如,我有一个大小为 10 的 recylerview。recyclerview 的每一项都包含一个 LinearLayout 和里面的 linearlayout 两项,一个是 Edittext,另一个是 Button。当我点击第 7 个项目按钮时,我将如何获得第 7 个项目的 Edittext 的文本?我希望我已经解释得很好任何帮助,将不胜感激。
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

首先,您需要两个引用:一个是您的EditText,一个是您的Button. 你可以在你的ViewHolder. 接下来,您需要一个OnClickListener. ViewHolder 也可以方便地实现一个,但您也可以使用onBindViewHolder()它。


在 OnClickListener 中,如果需要,您可以使用 switch 语句过滤掉您的 id,然后像这样获取 EditText 的内容:


switch(viewId) {

    case R.id.buttonId:

        String text = editText.getText().toString();

        // do something with that text

        return true;

}

如果您在 ViewHolder 中实现了 OnClickListener,则可以在 ViewHolder 中执行此button.setOnClickListener(this);操作,以确保onClick()在单击按钮时实际调用。


编辑: 这是一些应该适用于您的案例的示例代码。如上所述,我正在此处实施 View.OnClickListener 。


public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {


    EditText editText;

    Button button;


    public ViewHolder(View itemView) {

        super(itemView);


        editText = itemView.findViewById(R.id.editText);

        button = itemView.findViewById(R.id.button);

        button.setOnClickListener(this);

    }


    @Override

    public void onClick(View view) {

        switch(view.getId()) {

            case R.id.button:

                String text = editText.getText().toString();

                break;

        }

    }

}

这是它会是什么样子,如果你是做在你的onBindViewHolder()(在这种情况下,你不要在你的ViewHolder实现OnClickListener明显):


@Override

public void onBindViewHolder(final ViewHolder holder, int position) {

    holder.button.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            String text = holder.editText.getText().toString();

        }

    });

}


查看完整回答
反对 回复 2021-06-30
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

人们在不知道答案或不理解问题时输入 -1。好搞笑!!在 onclick 中,我从视图中获取了 parent(getParent()) 并访问了父级的第二个子级。这样我就可以访问兄弟姐妹的内容。


                    ` public void onClick(View v) {

                          for(int i = 0;i<parent.getChildCount();i++){

                               if(parent.getChildAt(i)instanceof EditText){

                                  passwordView = (EditText)parent.getChildAt(i);

                                }

                           }

                      }`


查看完整回答
反对 回复 2021-06-30
?
翻阅古今

TA贡献1780条经验 获得超5个赞

您可以在您的适配器中完成它,该适配器正在回收器视图中设置。


 public class MyViewHolder extends RecyclerView.ViewHolder {


        public ImageView mImageView;


        public MyViewHolder(View itemView) {

            super(itemView);


            mImageView = itemView.findViewById(R.id.imageView);


        }

    }

在 bindview 持有者中,您可以访问视图


public void onBindViewHolder(@NonNull final ImageAdapter.MyViewHolder holder, int position) {

      holder.mImageView.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

             //Your Code to access the edit text content

            }

        });

    }


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信