我正在尝试创建一个上下文 float 菜单,其中包含所选菜单的信息(位置、ID 等),以便可以在重写方法中访问 onContextItemSelected
在我的 fragment 中。
所以我有一个从 RecyclerView.Adapter<ViewHolder>
扩展的自定义适配器和定制ViewHolder
类在单独的文件中。
我注册了我的点击监听器并在自定义 ViewHolder
中提供了它的处理程序类(class)。
因为我需要发送 ViewHolder
当事件触发时,我需要将信息返回到我的 fragment ,我需要引用我的适配器,因为我的 fragment 具有 adapter object reference
但不是viewholder object reference
。所以在自定义的实例化阶段ViewHolder
(因为没有方法从 ViewHolder
类获取适配器引用),我将适配器引用传递给自定义 ViewHolder
的构造函数在其处理程序中使用,因此我可以在 ViewHolder
中调用此引用类将信息传递给Adapter
来自ViewHolder
,最后来自Adapter
至Fragment
。
我的问题是,是否有更好的实践或通用方法仍然将处理程序保留在 ViewHolder
内?就我而言,我注意到每个 ViewHolder 实例都必须保留对适配器的引用,这会消耗内存。按照我上面列出的方式进行操作,将来可能会出现任何冲突吗?
最佳答案
也许我不太理解你的模式,但你正在寻找的引用资料已经在那里了。
fragmens 知道适配器引用,适配器也知道你的viewholder。 使用getAdapterPosition()获取对您的对象的引用
假设有一个ArrayList<String>
在您的 RecyclerView.Adapter<ViewHolder>
中命名列表 :例如,此代码在 Fragment 中显示一个 Toast,其中包含单击的字符串的值
public ViewHolder( View itemView) {
super(itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String myValue = list.get( getAdapterPosition() ); // your object
Toast.makeText(activity, myValue, Toast.LENGTH_SHORT).show();
}
});
}
关于java - 从 ViewHolder 获取适配器实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37652084/