我有一个recyclerview
,每行都有一个edittext
行数介于50和60之间。我从服务器获取行数
如何获取每个edittext
的文字?
这个动作可以给我异常错误吗?
答案 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)