1

listView があり、各項目を押したときに展開したいと考えています。そのための次のコードがあります。ViewStub を膨らませて作業します。

それは正常に動作します。つまり、リスト項目を押すと、実際に膨らみます。ここまでは順調ですね。

ただし、私のリストは長く、リストを下にスクロールすると、他の項目も膨らんでいることに気付きました。理由はよくわかりません。そして、もう一度上にスクロールすると、最初に押したアイテムが「収縮」し、代わりに他のアイテムが膨張しました。

@override
public void onListItemClick(ListView l, View v, int position, long id) {


    ListView list = getListView();
    int start = list.getFirstVisiblePosition();
    for (int i = start, j = list.getLastVisiblePosition(); i <= j; i++) {
        Cursor item = (Cursor) list.getItemAtPosition(i);

        if (id == item.getLong(item.getColumnIndex(ItemColumns._ID))) {
            View view = list.getChildAt(i - start);

            ViewStub stub = (ViewStub) view.findViewById(R.id.stub);
            if (stub != null) {
                stub.inflate();

            }       
        }
    }
}

どんな助けでも大歓迎です!

4

1 に答える 1

1

Android はListView. そのためconvertView、 のgetView(..)メソッドに がありますAdapter。この SO の投稿は次のように説明します: ListView reusing views when ... I do n't want it to...SetgetView(..)

if(mExpanded.contains(getItem(position))) {
  //show expansion
} else {
  //hide expansion
}

次に、onListItemClickメソッドに次を追加します。

if(!mExpanded.remove(getListView().getItem(position))) {
   mExpanded.add(getListView().getItem(position));
}

これにより、アイテムSetが変更されていない場合、アイテムの削除が試行されます-つまり、アイテムがSet削除される必要がなかった場合は、追加します...

于 2012-07-22T19:01:09.610 に答える