android - 如何让recyclerview加载所有itemviews
问题描述
我有一个 recyclerview 最多可以加载 30 个 itemview 和更多在每个 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 只加载适合屏幕的项目它在视图 val 处为屏幕外的项目提供空指针是否有任何解决方案可以实现这一点 我得到的解决方案 是添加 A每个 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());
}
}
});
...
}
在实现回调接口的活动中,
class MainActivity extends AppCompatActivity implements Callback{
private String data = new String[30];
...
@Override
function updateValue(int position, String value){
data[position] = value;
}
...
}
推荐阅读
- asp.net-core - 如何使用 LoginId 调用 IdentityServer4 SignOut
- python - 如何在 Python 中将 PID 写入文件?
- node.js - 如何从 vuejs3 中的 fs.readFile 获取数据
- linux - 在开源 QT 中安装 MQTT 模块
- javascript - 添加更多由 php 生成的选择字段
- node.js - 使用 exec 获取函数的输出,使用 execSync 获取另一个函数的输出到文件和标准输出
- nginx - 如何通过 NGINX Ingress Controller 暴露端口 22?
- sql - 将日期列表转换为 DateFrom/DateTo 范围的最佳方法
- python - 为什么 pandas str.replace 用 .* 模式多次插入替换值
- python - 在 Python 中对项目进行排序