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

时间:2018-08-05 18:29:15

标签: java android android-recyclerview onclicklistener

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

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

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

任何帮助将不胜感激。

7 个答案:

答案 0 :(得分:0)

您可以将支架样式用于RecylcerView适配器。然后,您可以在按钮上设置点击监听器,然后从EditText获取文本。

boto3

答案 1 :(得分:0)

第1步:在适配器中创建一个抽象函数。

abstract void onButtonClicked(String text);

第2步:声明您的适配器摘要。

第3步:如果您实例化了适配器,则在您的活动中覆盖方法(onButtonClicked(String text);)。

第4步:在适配器中,在onClickListener内的按钮上调用该函数:

onButtonClicked(editText.getText().toString());

,您将在活动中获得覆盖该方法的字符串。

答案 2 :(得分:0)

您可以在已在回收站视图中设置的适配器内部进行操作。

 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
            }
        });
    }

答案 3 :(得分:0)

首先,您需要两个引用:一个指向您的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();
        }
    });
}

答案 4 :(得分:0)

只需使用您的ViewHolder。它包含您想要的所有孩子。在每个项目都膨胀的适配器内实现代码。这是一个例子。

//inside the onBindViewHolder
viewHolder.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String text = viewHolder.editText.getText().toString();
                    Log.d("output", text);
                }
            });

如果您使用的是FirebaseUI,则可以在populateViewHolder(对于较旧的版本)和onBindViewHolder(对于较新的版本)中实现。

答案 5 :(得分:0)

在持有人中使用这样的自定义侦听器:

    public class SimpleViewHolder extends RecyclerView.ViewHolder {
 private EditText simpleEditText;  
private Button simpleButton;  
public SimpleViewHolder(final View itemView, final OnItemSelectedListener listener) {  
super(itemView);  
simpleEditText = (EditText) itemView.findViewById(R.id.simple_edit_text);  
simpleButton = (Button) itemView.findViewById(R.id.simple_button); 
 simpleButton.setOnClickListener(new View.OnClickListener() {  
@Override public void onClick(View v) {  
String text = simpleEditText.getText().toString();
 if(listener != null) listener.onItemSelected(text);
  }
  });
  }

    public interface OnItemSelectedListener{ 
void onItemSelected(String value);
 }
  }

答案 6 :(得分:0)

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

$('body').on('click','#exit',function(e){    
   var this_b = $(this).parent().prev().children(0).html();// get the text
   alert(this_b);
});