这个问题与 StackOverflow 上的许多其他问题非常相似,但由于与此处的其他问题相比方法不同,我认为它值得自己发表。
我有一个扩展的自定义适配器CursorAdapter
。我正在更新数据并调用notifyChange
适当的 URI 以刷新光标。在调试中,我可以看到它工作正常。
不幸的是,我的列表视图没有被重新创建。我需要重新创建它们的原因是因为我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
。
以下是我尝试过的其他一些同样无效的方法:
adapter.notifyDataSetChanged()
数据更新后调用。- 在数据更新后
contentResolver.notifyChange(...)
调用。adapter.notifyDataSetChanged()
- 调用
adapter.changeCursor(newCursor)
后跟adapter.notifyDataSetChanged()
. - 调用
view.invalidate()
更改的特定列表项。
关于如何解决这个问题的任何其他建议?
编辑:我可能完全只是采取了错误的方法。我误解了适配器内视图的回收,我发现回收时使用了错误类型的视图。因此,我可能需要使用另一种方法来设置我的视图样式。我首先采用这种方法的原因是因为我希望使用样式,除了在 StackOverflow question 中解释的膨胀视图之外,无法以编程方式设置样式。我对在正确回收列表项视图的同时利用该答案的方法持开放态度。