0

トグルボタンとして使用しているという見方があるとしましょう。ユーザーがクリックすると、を使用して背景を変更しますsetBackgroundResource()。リストの数は約15アイテムでListView、画面に表示できるのは約7アイテムのみです。

最初は使ってみますListView.getChildAt(position)が、位置が7以上になると戻りますNullPointer。15ListView.getCount()を返しますが、表示されている子のみが表示されるため、これは理にかなっています。

次に、これAdapterにバインドするすべてのデータをループして解決し、ブール値を変更して、notifyDataSetChange()

したがって、ループの数は、更新データの場合は15+表示ビューの場合は7になります。

最善の方法は15である必要があり、それが実行されます。これを達成する方法はありますか?

感謝

4

1 に答える 1

1

あなたの子供のインデックスを忘れてください。アダプターで何らかのタイプのフラグを切り替えるだけです。

次に、 getView メソッドが再度呼び出されると、リストが再描画されます。

すなわち:

public class YourAdapter extends BaseAdapter {

   private boolean useBackgroundTwo = false;

   .. constructor ..

   @Override
   public View getView (int position, View convertView, ViewGroup parent) {

       ...


       ...


       View background = findViewById(...);

       int backgroundResource = R.drawable.one;
       if(useBackgroundTwo){
            backgroundResource = R.drawable.two;
       }
       background.setBackgroundResource(backgroundResource);



       ....
   }

    public void useNewBackground(){
       this.useBackgroundTwo = true;
       notifyDataSetChanged();
    }

    public void useOldBackground(){
       this.useBackgroundTwo = false;
       notifyDataSetChanged();
    }

}

次に、アクティビティ コードで:

((YourAdapter) listview.getAdapter()).useNewBackground();

さらに、ブール値の代わりに列挙型を使用して複数のメソッドsetBackgroundGreen()setBackgroundRed()使用するか、使用するドローアブルを渡すことができますsetItemBackground(R.drawable.one);。選択はあなた次第です。

API: アダプター

于 2012-12-28T10:29:53.940 に答える