1

によって制御される によって設定されaddFooterViewた にフッター ビューを追加するために使用しています。ただし、 がフッター ビューをリサイクルしようとする 場合があり ます ( を介して)。これにより、(リサイクルを許可した場合)またはフッタービューとして表示される一部のアイテムビュー(リサイクルを許可しない場合)が発生します。ListViewCursorAdapterLoaderListViewCursorAdapter.bindViewClassCastException

私が正しく理解している場合、追加されたフッタービューはaddFooterViewリサイクルされることは想定されていません(「フッタービューは、レイアウト中にリサイクルされるべきではないリストの下部にある特別なビューです」)。したがって、これはおそらく Android API のバグです。

この問題を回避する方法はありますか? ListViewによって移入されたフッター ビューを追加する正しい方法は何CursorAdapterですか?


関連するコード:

アクティビティでは:

paletteView = (ListView)findViewById(R.id.palette);
paletteView.addFooterView(new PaletteAdapter.NewSlot(this));
paletteAdapter = new PaletteAdapter(this, null);
paletteView.setAdapter(paletteAdapter);
getLoaderManager().initLoader(0, null, this);

アダプター内 ( PaletteAdapter):

@Override public void
bindView(View view, Context context, Cursor cursor)
{
  if (view instanceof NewSlot)
    {
      Log.wtf(TAG, 
              ("Recycle NewSlot to ID "
               + cursor.getLong(cursor.getColumnIndex
                                (DataProvider.Palettes._ID))));
      return;
    }
  final Slot slot = (Slot)view;
  // Blah blah...
}
4

2 に答える 2

1

自分で解決しました。

この回答のおかげで、次のように機能を上書きし、getViewすべてがうまく機能しました。Abhinavに再び感謝します。問題が発生した場合は、ソース コードを詳しく調べる必要があります。

@Override public View
getView(int position, View convertView, ViewGroup parent)
{
  if (convertView instanceof NewSlot)
    return super.getView(position, null, parent);
  else return super.getView(position, convertView, parent);
}
于 2013-08-11T17:07:11.230 に答える