newView() と bindView() がオーバーライドされた CursorAdapter があります。問題は、bindView() が newView() によって作成されたビューに正しくマップされないことです。
newView() は、以下のように、カーソル値に従って異なるレイアウトから膨張した 2 つの異なるビューを返します。
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent){
View view = null;
int who = //... get a value from cursor
switch(who){
case 0:
view = LayoutInflater.from(context).inflate(R.layout.first, null);
view.setTag("case 0"); // for bindView() mapping inspection
break;
case 1:
view = LayoutInflater.from(context).inflater(R.layout.second, null);
view.setTag("case 1"); // for bindView() mapping inspection
break;
default:
break;
}
return view;
}
次に、bindView() は通常どおりです。カーソルから値を取得し、newView() から返されたビューの UI 要素に値を設定します。特にない。newView() で設定されたビューのタグを示す bindView() にログを配置しました。ログは、 bindView() が呼び出されたときに目的のビューを取得しないことを示しています。
bindView() が呼び出されると、メモリ効率のために既存のビューがあればバインドすると思いました。したがって、bindView はおそらく行 _ID で識別される特定のビューを取得すると考えました。しかし、それが呼び出されると、既存のビューを取得するだけのようです。
ビューが異なるレイアウトを持つことができる場合、bindView が特定のレイアウトで指定されたビューを取得するようにするにはどうすればよいですか?