java - 从 ViewHolder 获取适配器实例

标签 java android android-fragments

我正在尝试创建一个上下文 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 ,最后来自AdapterFragment

我的问题是,是否有更好的实践或通用方法仍然将处理程序保留在 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/

相关文章:

java - JAXB 创建上下文和编码器成本

android - 使用支持库时 LoaderManager 出错

javascript - Cordova 移动应用程序的 jQuery 值未更新结果

android - 权限拒绝 : opening provider com. miui.gallery.provider.GalleryOpenProvider

java - 由于未找到 View 错误, ScrollView 被隐藏

Android - WebViewFragment 和 NavigationBar

java - 向微调器添加数据

java - 在 C# 中序列化 Java 对象和反序列化

java - 将c++代码翻译成java

android - 在同一 fragment 的不同实例之间进行通信