2016-08-09 16 views
-2

私はカスタムリストビューを実装しようとしています。私は項目を選択するが、私はif()条件を追加する場合、ビューが正しく表示されているが、2つの項目(非とき、私は、1つのアイテムを選択しますif()条件なしでgetView()方法リストビューで2つのアイテムが選択されました。

if()ステートメントを使用するまで、すべてが正常に動作します隣接する)が選択されます(1番目と最後の1番目と2番目の最後のいずれかの組み合わせ)。

View getView(...){ 
    .... 
    if (!item.getPriceTo().equals("")) 
       priceToTV.setText(item.getPriceTo()); 
      else 
       priceToTV.setText(item.getPriceFrom()); 
    return view; 
} 

また、私は、現在の選択がred_borderを持っており、それが選択されている場合black_borderが、それに設定されているので、選択を表示する前のビューを保存使用しています。:

subItemsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Log.d("New Order", "........"); 
       if (previousViewOfSubItems != null && previousViewOfSubItems != view) { 
        previousViewOfSubItems.setBackgroundResource(R.drawable.black_border); 
        if (quantity.getText().toString().equals("xx") || quantity.getText().toString().equals("0")) { 
         viewForVisibility.setVisibility(View.GONE); 
         layoutForQuantity.setVisibility(View.GONE); 
        } 

       } 
       if (previousViewOfSubItems == view) 
        return; 
       previousViewOfSubItems = view; 
       previousViewOfSubItems.setBackgroundResource(R.drawable.red_border); 
       viewForVisibility = previousViewOfSubItems.findViewById(R.id.viewForVisibility); 
       viewForVisibility.setVisibility(View.VISIBLE); 
       layoutForQuantity = (LinearLayout) previousViewOfSubItems.findViewById(R.id.layoutForQuantity); 
       layoutForQuantity.setVisibility(View.VISIBLE); 
       quantity = (TextView) previousViewOfSubItems.findViewById(R.id.subTypeQuantity); 

      } 
     }); 
+0

そのそれはリストビューのアイテムを表示するビューを再利用beacause最初のビューがスクロールアウトされると、同図は、底部のビューを表示するために再利用されますリストビュー。ビューを比較する代わりに、クリックしたビューの位置を比較してみてください。 –

答えて

1

previousViewOfSubItems = view;をするようです

アダプターのリストビューでは、ビューがアダプターによって再利用されるので、ビューインスタンスを保存しないようにしてください。ビューインスタンスの参照の使用を保存するのではなく、ビューを2行で同じにすることができます。 g

0

リストビューはリスト内のビューをリサイクルします。スクロールすると、メソッドを使用してトップビューが再利用され、コンテンツが置き換えられます。

背景を赤などに設定する場合は、Elseステートメントを使用してデフォルトの黒に戻します。

0

リストビューはアイテムを表示するためにビューを再利用します。最初のビューがスクロールされると、同じビューが再利用されてリストビューの下部にビューが表示されます。ビューを比較する代わりに、クリックしたビューの位置を比較してみてください

1

異なる位置にあるすべてのビューを正しく識別するためには、ViewHolderパターンとビュータギングを使用する必要があります。 ListViewは常にビューを再膨張させる代わりに、ビューをリサイクルします。

ViewHolderパターンの実装方法については、Android Training documentationを参照してください。

+0

はい私はListViewがビューをリサイクルすることは知っていますが、この問題が発生したのは初めてです。 –

+0

ビューの複雑さによって異なります。あなたが単純なビューを持っているなら、バグは起こらないかもしれません。しかし、どのような状況においても、視聴者のパターンを私たちに勧めることができます。 –

+0

これは私のためにやった。 –

0

私はこの問題を解決するためにあなたが参照しているrecyclerviewのblogでこの異常な動作について説明しました。

使用POJOクラスは、ステータスを取得し、ビューを更新するために応じ

関連する問題