この質問は、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
がリスト データを更新していることですが、必要なビューを .sys 経由で再作成していないことですnewView
。
私が試した他のいくつかのことは、同様に機能しませんでした:
adapter.notifyDataSetChanged()
データが更新された後に呼び出されます。- データが更新さ
contentResolver.notifyChange(...)
れた後に呼び出されます。adapter.notifyDataSetChanged()
- と呼ばれ、
adapter.changeCursor(newCursor)
その後にadapter.notifyDataSetChanged()
. view.invalidate()
変更された特定のリスト項目で呼び出されます。
これにアプローチする方法に関する他の提案はありますか?
編集:私はまったく間違ったアプローチを取っているだけかもしれません。アダプター内でのビューのリサイクルを誤解していました。リサイクル時に間違ったタイプのビューが使用されているようです。そのため、おそらく別のアプローチを使用してビューのスタイルを設定する必要があります。そもそもこのアプローチを採用した理由は、この StackOverflow question で説明されているように、ビューを膨らませる以外にプログラムで設定できないスタイルを使用したいという私の願望によるものです。リスト項目ビューを適切にリサイクルしながら、その答えを利用するアプローチを受け入れます。