我有一个可加载多达 30 个 itemview 及更多的 recyclerview
在每个 itemview 中它都有一个 Edittext 让用户输入一些数据
还有一个保存按钮。
在保存按钮内点击
for (i in 0 until count){ //count = myRecycler.layoutmanager.itemcount
val view = myRecycler.layoutmanager!!..findViewByPosition(i)
val input: EditText = view!!.findViewById(R.id.input)
list.add(input.text.toString())
}
它适用于每个 itemview 按位置
但是因为 recyclerview 只加载适合屏幕的项目,它会在 View val 处为屏幕外的项目提供空指针
有什么解决方案可以做到这一点
我得到的解决方案
是在每个itemview上添加一个保存按钮,这样当用户输入数据时,他点击保存按钮等等。
但这不是我需要的
最佳答案
我建议您通过 setOnFocusChangeListener 在每个 editText 失去焦点时触发回调,以更新您拥有的 Activity 或 Fragment 中的数据列表。 RecyclerView.Adapter 中的代码
interface Calllback{
function updateValue(int position, String value)
}
@Override
public void onBindViewHolder(myViewHolder holder, int position) {
...
holder.editText.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus) {
callback.updateValue(holder.getAdapterPosition(), ((EditText)v).getText().toString());
}
}
});
...
}
在实现回调接口(interface)的 Activity 中,
class MainActivity extends AppCompatActivity implements Callback{
private String data = new String[30];
...
@Override
function updateValue(int position, String value){
data[position] = value;
}
...
}
关于android - 如何让recyclerview加载所有itemviews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52031463/