gpt4 book ai didi

android - 在 CursorAdapter 中更改光标未正确更新列表项 View

转载 作者:行者123 更新时间:2023-11-29 01:52:42 24 4
gpt4 key购买 nike

这个问题与 StackOverflow 上的许多其他问题非常相似,但我认为它值得单独发表,因为与此处的其他问题相比,方法有所不同。

我有一个扩展 CursorAdapter 的自定义适配器。我正在更新数据并在适当的 URI 上调用 notifyChange 以刷新光标。在调试中,我可以看到它工作正常。

不幸的是,我的 ListView 没有被重新创建。我需要重新创建它们的原因是因为我在适配器上实现了 newView:

public View newView(final Context context, final Ingredient ingredient, final ViewGroup parent) {
final int layout = ingredient.isOwned() ? LAYOUT_OWNED : LAYOUT_UNOWNED;
final View view = LayoutInflater.from(context).inflate(layout, null);

// ... ViewHolder magic

return view;
}

问题是调用 notifyChange 正在更新列表数据,但它没有通过 newView 重新创建我需要的 View 。

以下是我尝试过但同样无效的其他一些方法:

  • 在数据更新后调用了 adapter.notifyDataSetChanged()
  • 在数据更新后调用 contentResolver.notifyChange(...),然后调用 adapter.notifyDataSetChanged()
  • 调用 adapter.changeCursor(newCursor),然后调用 adapter.notifyDataSetChanged()
  • 对发生变化的特定列表项调用了 view.invalidate()

关于如何处理这个问题还有其他建议吗?

编辑:我可能完全采用了错误的方法。我误解了适配器内 View 的回收,我看到回收时使用了错误类型的 View 。因此,我可能需要使用另一种方法来设计我的 View 样式。我首先采用这种方法的原因是因为我希望使用样式,除了将 View 膨胀为 explained in this StackOverflow question 之外不能以编程方式设置样式。 .我对在正确回收列表项 View 的同时利用该答案的方法持开放态度。

最佳答案

我最终根据 this StackOverflow answer 找出了问题.我需要覆盖适配器上的 getItemTypeCountgetItemViewType

@Override
public int getItemViewType(int position) {
return getItem(position).isOwned() ? 1 : 0;
}

@Override
public int getViewTypeCount() {
return 2;
}

关于android - 在 CursorAdapter 中更改光标未正确更新列表项 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17004240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com