首页 > 解决方案 > 如何让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 上的保存按钮,这样当用户输入数据时,他单击保存按钮等等。但这不是我需要的

标签: androidandroid-recyclerviewkotlin

解决方案


我建议您通过 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;
    }

    ... 
}

推荐阅读