2

ListView購入するさまざまなアイテムを表示するがあります。ユーザーがアイテムを選択した場合、「」ボタンBuyと「Add」ボタンを表示するように設定します。ユーザーが他の項目をクリックするとVisibility、以前に選択した「」Buyと「Add」のがに設定されGone、同時に、選択したリスト項目ののがVisibility再びに設定されます。ButtonVisible

ただし、リストビューを2〜3回スクロールすると、最初に選択したリストアイテムが非表示になりません(可視性をGone)" Buy"および" Add"に設定しButtonます。ビューのリサイクルと関係がありますか?ここにコードを表示します:

ButtonVisibilityFunction(View v) {
   if(mBuyButton!=null && mAddButton !=null) {
      mBuyButton.setVisibility(View.Gone); 
      mAddButton .setVisibility(View.Gone);
   }
      mBuyButton = (ImageButton) v.findViewById(R.id.Buy);
      mAddButton = (ImageButton) v.findViewById(R.id.Add);

      mBuyButton.setVisibility(View.Visible); 
      mAddButton .setVisibility(View.Visible);
}

上記の関数をmlistView.setonItemClickListner()...で呼び出しました。

4

2 に答える 2

2

これはよく知られている「問題」です。実際、listviewがどのように正確に機能するかを理解する必要があります。メモリを節約するために、画面に表示している要素のみがライブになります。他のものは、スクロールして戻ると、破壊されて再作成されることがよくあります。

これが、要素を非表示にすると、再作成されるため、再び表示される理由です。

したがって、それらを再び非表示にするには、リストビューがビューを再作成するたびにこれを行う必要があります。

これを行うには、getViewメソッドを上書きし、必要な要素を非表示に設定する必要があります。

于 2013-03-22T09:25:51.603 に答える
0

私はこの問題を次のように解決しました:mAdapter.notifySetDataChanged(); !!

于 2013-03-22T11:20:07.720 に答える