猿问

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

我正在设计一个 RecyclerView 列表。Recyclerview 的每一项都包含一个 LinearLayout。这个 LinearLayout 包含两个视图,第一个是 EditText,第二个是 Button。当用户点击按钮时,它会触发一个 onclick 事件。从 onClick 侦听器,我需要获取 EditText 的内容。当用户点击另一个同级视图时,我找不到访问同级视图内容的方法。

我的问题不是“如何将单击侦听器设置为适配器内的按钮”。大多数人回答了如何将 onClick 侦听器设置为 recyclerview 项目内的按钮。我的问题有点不同,当我在从按钮触发的 onClick 方法中时,我将如何访问作为按钮兄弟的编辑文本。每个项目都有一个编辑文本,所以当我点击一个按钮时,我将如何找到正确的编辑文本?

例如,我有一个大小为 10 的 recylerview。recyclerview 的每一项都包含一个 LinearLayout 和里面的 linearlayout 两项,一个是 Edittext,另一个是 Button。当我点击第 7 个项目按钮时,我将如何获得第 7 个项目的 Edittext 的文本?我希望我已经解释得很好

任何帮助,将不胜感激。


慕码人2483693
浏览 199回答 3
3回答

ITMISS

首先,您需要两个引用:一个是您的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明显):@Overridepublic 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();        }    });}

拉丁的传说

人们在不知道答案或不理解问题时输入 -1。好搞笑!!在 onclick 中,我从视图中获取了 parent(getParent()) 并访问了父级的第二个子级。这样我就可以访问兄弟姐妹的内容。&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ` public void onClick(View v) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(int i = 0;i<parent.getChildCount();i++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(parent.getChildAt(i)instanceof EditText){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; passwordView = (EditText)parent.getChildAt(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }`

翻阅古今

您可以在您的适配器中完成它,该适配器正在回收器视图中设置。&nbsp;public class MyViewHolder extends RecyclerView.ViewHolder {&nbsp; &nbsp; &nbsp; &nbsp; public ImageView mImageView;&nbsp; &nbsp; &nbsp; &nbsp; public MyViewHolder(View itemView) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super(itemView);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mImageView = itemView.findViewById(R.id.imageView);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }在 bindview 持有者中,您可以访问视图public void onBindViewHolder(@NonNull final ImageAdapter.MyViewHolder holder, int position) {&nbsp; &nbsp; &nbsp; holder.mImageView.setOnClickListener(new View.OnClickListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onClick(View view) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Your Code to access the edit text content&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Java
我要回答