0

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 は、コードのこの部分のどの時点でも触れられておらず、クラスのどこにも触れられていません。

4

1 に答える 1

0

気にしないで..このエラーを何日も検索しましたが、解決策が見つかりました。

問題は、プログラムで下部のカバーフローを作成し、プログラムでlayout_heightで両方の高さを設定したことです。カバーフローのアダプターを変更するたびに、その測定メソッドが呼び出されたため、下のカバーフローの測定メソッドも呼び出されました (それらは layout_height によってリンクされているため)。これを XML で設定し、layout_sum をスーパー リニア レイアウトに追加すると、問題が解消されました。

ああ、助かった..

于 2012-08-25T13:36:24.130 に答える