从recyclelerview的每一行获取数据

时间:2016-03-14 15:37:09

标签: android android-recyclerview

我有一个recyclerview,每行都有一个edittext 行数介于50和60之间。我从服务器获取行数 如何获取每个edittext的文字?
这个动作可以给我异常错误吗?

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

  

如何获取每个edittext的文本?

您无法获得所有50的文本。您只能获取当前屏幕上的值。使用RecyclerView时,您只有EditText个在屏幕上可见的对象。当您滚动列表时,EditText被重复使用,即即使您有50行,也不会有50个EditText个对象。

如何将数据加载到EditText个?您已将所有数据加载到EditText s中。如果您想在用户输入内容后获取数据,请使用OnTextChangedListener获取更改的文本,然后更新模型。

  

这个动作可以给我异常错误吗?

同样,没有50 EditText s,所以这是不可能的。如果您确实需要从视图中获取值,则只能从可见的视图中获取值。这不会给你任何例外或错误。

答案 1 :(得分:1)

您可以在适配器和视图持有者中实现此逻辑:

class YourAdapter extend RecyclerView.Adapter<YourAdapter.ViewHolder> {
     List<String> yourEditTextContents = ...;

     @Override
     public void onBindViewHolder(ViewHolder holder, int position) {
          holder.yourEditText.setTag(position);
          holder.yourEditText.setText(yourEditTextContents.get(position));
     }

     class ViewHolder extend RecyclerView.ViewHolder {
          EditText yourEditText;
          public ViewHolder(View root){
               ...
               yourEditText = root.findViewById();
               yourEditText.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        int position = (int)yourEditText.getTag();
                        yourEditTextContents.set(position, s.toString());
                    }
                });
          }
     }
}

之后,您可以使用编辑文本的文本:

yourEditTextContents.get(position)