1

ListViewAdapter で OnClickListener を使用すると、奇妙な結果が得られます。すべてが正常に機能しています。位置は正しく分配されます - 0,1,2,3....16,17,18...

すべての位置には、OnClickListener を持つ独自のボタンがあります。

ここで、位置 2 などの特定の位置でボタンをクリックすると、位置 2 と位置 12 で 2 つのイベントがトリガーされます。5 番目のボタンをクリックすると、5 番目と 15 番目の位置がイベントを取得します。18日なら18日と8日。等々。

何故ですか ?コードは次のとおりです。

 @Override
 public View getView(final int position, View cell, ViewGroup parent) {
 final Holder holder;
 if (cell == null){
 holder = new Holder();
 ........
 cell.setTag(holder);
 }
 else{
 holder = (Holder)cell.getTag();
 } 

 holder.mainButton1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    .....
      }  
   });
  return cell;
}
4

2 に答える 2

0

「イベントがトリガーされる」というフレーズで、イベントはリストビューのビューアイテムへの何らかの変更であると思います。
ご覧のとおり、リストビューのビューはリサイクルされます。
画面に最大 10 個のリスト ビュー アイテムを含めることができる場合、10 個のビューのみが作成されます。
したがって、最初は 1 ~ 10 ビュー、次に 2 ~ 11、次に 3 ~ 12 のビューが表示されますが、ビューの作成はステップ 1 ~ 10 ビューでのみ行われます。
11 番目の要素には 1 番目の要素のビューがありますが、コードによって内容が異なります (したがって、1 番目と 11 番目のアイテムは同じビューを共有します)
。そのため、背景を変更するなど、1 番目のアイテムに変更を加えると、この変更は 11 番目のアイテムに残されます。 .

したがって、リサイクルを無効にするか、何らかの方法でリサイクルされたビューをリセットする必要があります

于 2015-09-06T20:17:36.050 に答える