2011-07-19 24 views
0

私は今 サポート複数選択するにはArrayAdapterが管理していること、すべての項目の CheckedTextViewとListViewコントロールを使用するアプリケーションを開発しています。私のListViewの内容は動的なので、 という意味は、実行時に変更することができます。今度は ListView.getCheckedItemPositions()を使用してすべてのチェック項目を取得しようとしています。 はチェックされた位置をすべて保存し、ユーザーがこのページをもう一度 に戻すと自動チェックします。だから私はすべてのページのチェック結果を保存する必要があります。CheckedTextViewでListViewにアクセスするには?

最初のページについては、すべて正常に動作します。しかし、ユーザーが別のページ に行っていくつかの選択を行うと、ListViewが返す結果配列 にはチェックされない位置がいくつか含まれています。私はListViewが この奇妙な振る舞いを持っている理由はありません。実際にチェックが行われていないページであっても、 ListViewは、1つの項目がチェックされていることを示す結果を返します。

CheckClickTextView の位置をOnClickListenerコールバックで取得する方法を教えていただけますか?

サンプルコードは参考になります。あなたが別のページに移動して、前のページに戻ったときに事前に

おかげで...

答えて

3

リストビューは、そのビューをリサイクルので、リストビューは、そのビューに対するgetViewメソッド()関数を呼び出します。チェックされたビューの順序が混ざらないようにするには、アダプターを初期化する前に、チェック状態がのすべてのビューであるを含むarraylistを作成します。その後、arraylistをアダプタのコンストラクタの引数として渡します。そこで、getView()関数では、arraylistに基づいてチェック可能なテキストビューのチェック状態を設定します。次に、アクティビティクラスに戻り、onItemClick()イベントをオーバーライドします。 、関数が呼び出されたときにあなたに与えられているビューを使用してチェック可能なのTextViewを取得し、そのチェック状態を設定するには、次の手順を実行します

listView1.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View selectedView, int position , long id) 
    { 
     CheckedTextView tv = (CheckedTextView)selectedView.findViewById(R.id.textview); 
     if (tv.isChecked()) 
     { 
      tv.setChecked(false); 
      checkStatesOfViews.get(position) = false; 
     } 
     else 
     { 
      tv.setChecked(true); 
      checkStatesOfViews.get(position) = true; 
     } 

} });

+0

CheckableTextViewの使い方は? – Selva

+0

CheckableTextViewの使い方については、[this](http://tokudu.com/2010/android-checkable-linear-layout/)をご覧ください。 –

関連する問題