RecyclerView里如果有edittext,并且改变edittext的内容的时候不做处理的话,滑动RecyclerView之后数据混乱。
一下方法亲测可用
1.初始化adapter
LinearLayoutManager layoutManager = new LinearLayoutManager(mRootView.getActivity()); recyclerView = mRootView.getRecyclerView(); recyclerView.setLayoutManager(layoutManager); recyclerView.setNestedScrollingEnabled(false); //绑定 adapter.bindToRecyclerView(recyclerView); recyclerView.setAdapter(adapter);
2.编写adapter
adapter 我是用https://www.jianshu.com/p/b343fcff51b0/ 这个组件做的。具体用法可参看文章
以下划重点
原理就是在convert 给edit加上addTextChangedListener,如果需要edit背景的一些处理还可以加setOnFocusChangeListener,在逻辑代码最后加上以下两行,关闭item的复用
helper.setIsRecyclable(false);
helper.setTag(R.id.rl_test, item);
具体代码
@Override
protected void convert(BaseViewHolder helper, Target.TargetListBean item) {
EditText editTextWeek = helper.getView(R.id.tv_number_week);
editTextWeek.setText(item.getTargetPerWeek() != 0 ? item.getTargetPerWeek() + "" : "");
setEditTextFocusChangeListener(editTextWeek, helper.getAdapterPosition());
helper.setIsRecyclable(false);
helper.setTag(R.id.rl_test, item);
}
private void setEditTextFocusChangeListener(EditText editText, int adapterPosition) {
editText.setOnFocusChangeListener((v, hasFocus) -> {
String string = editText.getText().toString();
boolean isNull = StringUtil.isNull(string);
if (hasFocus) {
//延迟30mm 光标移动到输入框最后
new Handler().postDelayed(() -> editText.setSelection(string.length()), 30);
setEditBg(editText, false);//改变背景的方法
} else {
setEditBg(editText, isNull);
}
});
editText.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) {
String edit = editText.getText().toString();
//这里把页面上输入的数据set进数据源,进行数据刷新,现在你上下滑动数据应该是没问题
data.get(adapterPosition).setTargetPerWeek(value);
}
});
}
在activity页面直接可以使用adapter.getData()获取最新的数据 不需要再去遍历view获取值
博客指出RecyclerView中有EditText时,若改变其内容不处理,滑动后会数据混乱。介绍了亲测可用的解决方法,包括初始化和编写adapter,原理是给edit添加监听器,关闭item复用,还给出了具体代码,可在activity页面用adapter.getData()获取最新数据。
1089

被折叠的 条评论
为什么被折叠?



