2011-12-06 8 views
0

私のListViewは単純なリストビューですが、彼には問題があります。
adapterというSimpleCursorAdapterを使用しています。アイテムをクリックするとTextViewを太字にし、背景を変更します。私はまた、以前に影響を受けた他のListViewアイテムをリセットする必要があります。リストビューのビューをリセットする

以下はonListItemClickイベントのコードです。このコードは、表示可能なリスト項目をリセットします。選択した項目を正しく太字にします。しかし、ユーザーがスクロールしたときにTextViewsが太字になっていると、ビューがリサイクルされていると推測されます。

だから、onClick以前にクリックされたtextViewsをリセットし、クリックしたアイテムを太字にしたいとします。

私が期待コードとして機能していません:あなたはリサイクル業者ではなく、新しいものを作成する画面から古いビューを使用したとして、何が起こることは、通常あり

@Override 
    public void onListItemClick(ListView listView, View view, int position, long id) 
    { 
     super.onListItemClick(listView, view, position, id); 

      //Tablet 
      for (int i = 0; i < adapter.getCount(); i++) 
      {     
       View mView = listView.getChildAt(i); 

       if (mView != null) 
       { 
        //Reset Bold text to default 
        TextView mtv = (TextView)mView.findViewById(R.id.Name); 
        mtv.setTypeface(null, Typeface.BOLD); 

        LinearLayout ll = (LinearLayout)mView.findViewById(R.id.itemlayout); 
        ll.setBackgroundDrawable(null); 
       } 
      }  

      TextView tv = (TextView)view.findViewById(R.id.Name); 
      tv.setTypeface(null, Typeface.NORMAL); 

      LinearLayout ll = (LinearLayout)view.findViewById(R.id.itemlayout); 
      ll.setBackgroundResource(R.drawable.dashboard_list_selector); 

    } 
} 

答えて

1

。必要なのは、アダプタを変更することです。必要なロジックはgetViewメソッドでも実装する必要があります。さらに、さまざまな背景を使用するために、異なるタイプのアイテムをサポートするためにアダプタが必要です。

exampleをご覧ください。この例では目標は異なりますが、必要なソリューションが適用されます。

申し訳ありませんが、すばらしい解決策はありません。それが役に立ったら教えてください。

0

あなたが持っている問題は、リストビューのスクロールを高速化するために、Android再利用ビューに基づいていることが以前に指摘されていました。私が過去にこれを修正したのは、項目を太字にする必要があるかどうかを追跡する並列配列を維持することです。 getViewコードで、太字の場合はitemsの位置のフラグをチェックし、そうでない場合は太字を解除します(デフォルトの状態に戻す必要があります)。次に、ユーザーがアイテムをクリックすると、フラグが切り替わり、notifyDataSetChangedと呼び出します。これにより、強制的に選択項目を再描画し太字にします。

関連する問題