如何从父片段访问RecyclerView中的项目?

时间:2019-11-23 16:36:39

标签: android android-fragments android-recyclerview android-viewholder

我正在尝试将onClickListener()方法附加到Recycler视图内的项目。我知道我可以通过RecyclerAdapter轻松地做到这一点,但是这样做的目的是显示一个自定义对话框,其中包含父片段包含的一些信息,有一些传递数据的方法,但是我认为最好附上而不是片段的侦听器,这样我就可以直接访问数据。

我尝试通过一些修改从片段中访问它的方式:

while

但是显然,在我尝试使用它时尚未创建myViewHolder对象,因此我得到了Java NullPointerException(F .. $&@#^ $&^%,请不要误解我,我喜欢它)。

因此,我需要一些帮助来完成我要尝试的操作,或者需要尝试一些其他好主意,以警告:我真的在尝试避免传递数据,除非使用ViewModel(不知道我是否可以),因为要传递的字段很多

1 个答案:

答案 0 :(得分:1)

这从根本上是不正确的。这里的问题是,RecylerView中有多个ViewHolders。您要附加哪一个?项目数量为n,并非所有项目都可以同时渲染。

使用回调函数,而不是更新 ViewHolder。

class MyAdapter extends RecyclerView.Adapter {
    MyAdapterCallback callback = null;
    ....
    @Override  
    public void onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.reportContainer.setOnClickListener { // You can set this in OnCreateViewHolder as well.
            if (callback != null) {
                 callback.onClick();
            }
        }
    }
}

interface MyAdapterCallback {
    void onClick()
}

从您的片段开始,

myAdapter.callback = new MyAdapterCallback() {
    @Override
    public void onClick() {
        // Access your fragment variables here.
    }
}