【问题标题】:How to run a method only after recycler View is loaded?如何仅在加载回收器视图后运行方法?
【发布时间】:2021-12-20 14:11:26
【问题描述】:

我有一个 recyclerView。我需要填写不同类型的输入类型,所以我尝试在制作 recyclerView 后放置这一行:

((EditText)recyclerView.findViewHolderForAdapterPosition(6)
.itemView.findViewById(R.id.editText))
.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

如果在单击按钮后完成,则可以正常工作,但如果只是放在 onStart() 方法上,如下所示:

loadrecyclerView();  //(fills the recyclerView with items)
        ((EditText)recyclerView.findViewHolderForAdapterPosition(6)
.itemView.findViewById(R.id.editText))
.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

它不起作用并发送错误代码:

Attempt to read from field 'android.view.View androidx.recyclerview.widget.RecyclerView$ViewHolder.itemView' on a null object reference

【问题讨论】:

    标签: java android android-studio android-recyclerview


    【解决方案1】:

    RecyclerView 需要一些时间来绘制项目,在设置 adapter 或调用 notifyDataSetChanged(或类似方法)后它们还没有准备好一行

    其中一种方法是等到RecyclerView 使用post 绘制其所有子级

    recyclerView.post(
        new Runnable(){
            // code in here will fire when recyclerView finishes all its jobs
            // e.g. redrawing
        }
    );
    

    但它是一种 hack,至少应该只使用。在您的情况下,setInputType 应该在 onCreateViewHolderonBindViewHolder 中的 adapter 中使用,甚至直接在列表项 XML 中使用

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多