android - 根据数据库中的信息在 RecyclerView 中显示不同的 viewType?

标签 android android-recyclerview android-cursor

遇到了一些障碍并想知道如何解决它,对我来说就像先有鸡还是先有蛋,需要一双新鲜的眼睛。

我有一个数据库,其中包含有关地点的信息。我想在我的 RecyclerView 中显示所有按距离排序的地点。

当只有一个 viewType 时,我实际上已经实现了这一点。然而,这是我无法弄清楚的,我想为用户一定距离内的地方显示不同的 View 。例如,100 米以内。

该信息在我的数据库中,所以当在 setAdapter() 上调用 getItemViewType(int position) 时,我的 CursorLoader 还没有完成提取所有信息,所以我得到一个空指针异常。

我的问题:

有没有一种方法可以让我等待我的 CursorLoader 完成然后使用我的适配器并且没有空的 Cursor?当我在加载程序完成后尝试调用 .setAdapter() 时,我在日志中得到以下信息:没有附加适配器;跳过布局,因为 RecyclerView 需要在创建 Activity 时设置适配器。

我的 getItemViewType(position) 目前看起来像这样:

if (!cursor.isClosed()) {
    cursor.moveToPosition(position);
}
if (cursor.getInt(2) <= 100) {
   return TYPE_NEARBY;
} else {
  return TYPE_NOT_NEARBY;
}

本质上,我需要使用 CursorLoader 中的数据来确定 viewType 并为该单元格加载不同的 View 。使用一种 ViewType 它可以工作,因为我不需要检查距离,它们都是相同的 View 。

感谢您提供的任何帮助!

最佳答案

感谢 blackbelts 的评论,最终让这个工作正常。

在 Debug模式下运行整个过程,一切都按预期进行。我只需要确保我对 onBindViewHolder(int position) 中的数据做正确的事情。

主要问题是因为我的 ViewHolder 中有一个“holderId”int 与我的 viewType int 不同,所以我可能只是混淆了它们。

关于android - 根据数据库中的信息在 RecyclerView 中显示不同的 viewType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36572998/

相关文章:

android - 在android中的编辑文本边框中添加渐变

android - 如何在java中对json对象数组进行排序

java - Android:无法处理 UnknownHostException [使用 Retrofit 2、okhttp3、rxandroid 2]

android - 如何在设计支持库的 TabLayout 中设置 Tab 之间的分隔符?

安卓:GUID 主键

java - 从 RecyclerView 适配器启动 Chrome 自定义选项卡

android - 当点击 recyclerView 中的另一个位置时,setVisibility 如何消失所有其他位置?

java - 如何在适配器中扩展多个类?

android - cursor.setNotificationUri() 是做什么用的?

android - 如何将超过 1 MB 的数据从 sqlite db 加载到 android 游标?