Stackoverflow コミュニティの皆様
私はかなり奇妙な問題を抱えています。まず、ある種の「選択」アクティビティを作成しました。これは、左側に WheelView があり、中央に Coverflow があり、その下に別の (小さい) coverflow があります。ところで。CoverFlow は、いくつかのロジックがオーバーライドされたギャラリーです。
中央のカバーフローは BaseAdapter を使用します。リストのセットをいくつか作成しました。coverflow が新しいコンテンツを取得するたびに、リストの 1 つを使用して BaseAdapter の新しいインスタンスを作成します。私の場合、これは下部の CoverFlow でアイテムを選択するときに行われます。だから私はOnItemSelectedListenerを実装して、それがいつ起こるかをチェックしました。このカバーフローをスクロールすると、ビューが常に「notifyDataSetChanged」になり、場合によってはアダプターが変更されます。今、これは魅力のように機能します。
このセレクター (中央のカバーフロー) には多くのオブジェクトがあるため、引き続き CursorAdapter を使用してパフォーマンスを向上させることにしました。現在、CursorAdapter には notifyDataSetChanged() メソッドがないようです。そのため、BaseAdapter と同じコード ロジックをコピーして、これを使用しました。下の Coverflow は、同じアダプター (この場合は、SpinnerAdapter を実装する ListAdapter) を引き続き使用します。ここで、まったく同じロジックを実行すると、中央の CoverFlowAdapter での各 notifyDataSetChanged() 呼び出しの後に、下部のカバーフローが再センタリングされます。私は真剣にそれを理解していません。約 5 つのクラスになるため、ここではロジック全体を投稿しませんが、問題のポイントは次のとおりです。
private OnItemSelectedListener itemSelListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// if(!selectedByClicking){
switchModelType(arg1.getId());
// }
}
private void switchModelType(int id){
int oldMode = mode;
mode = id;
for(int i = 0; i < currentColors.length; i++){
if(currentColors[i] != null)
currentColors[i].isSelected = false;
}
if(currentColors[mode] != null)
currentColors[mode].isSelected = true;
if(coverFlow.getAdapter() != null){
((SelectionObjectCursorAdapter)
coverFlow.getAdapter()).notifyDataSetChanged();
// if(decorIsWooden)
// checkIfWoodDecorAdapter(oldMode);
}
}
下部の CoverFlow は、コードのこの部分のどの時点でも触れられておらず、クラスのどこにも触れられていません。