2012-01-19 37 views
1

リストビューでユーザーがチェックする項目を選択したい。私はCHOICE_MODE_MULTIPLEにlistviewを設定して、それは私に複数の選択を行うことができるリストを示しています。しかし、どのようにチェック項目を取得するには?私は使用しようとしました: SparseBooleanArray sp = lv.getCheckedItemPositions(); チェックされた項目を格納するのはうまくいきますが、チェックされている項目がチェックされていない場合は配列を更新しません。これは、チェックされていない項目がチェックされた前のデータを表示します。 これを行う方法はありますか? は、ここに私のコードです:複数の項目から項目を選択するListView - android

final ListView lv = new ListView(getApplicationContext()); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_multiple_choice,arrayList); 
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    lv.setAdapter(adapter); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> 
      myAdapter, View myView, int myItemInt, long mylng){ 

      SparseBooleanArray sp= lv.getCheckedItemPositions(); 

      String str=""; 
      for(int i=0;i<sp.size();i++) 
      { 
       str+=arrayList.get(sp.keyAt(i))+","; 
      } 
      Toast.makeText(getApplicationContext(), 
        "You selected: "+str, 
        Toast.LENGTH_LONG).show(); 
      }     
    }); 

私もチェックされた項目を覚えておきたいとリストが開かれたときにチェックとしてそれを示しています。

+0

IMO if(sp.valueAt(i))processCheckedItem(sp.keyAt(i)); – Deucalion

+0

どのクラスがprocessCheckedItem()に属していますか?私はそれをちょうどと呼ぶことができません。オブジェクトを介して呼び出す必要があります。 –

+0

processCheckedItemはカスタム関数の例です。あなたは何でもすることができます。この場合、 "keyAt"はチェックされた項目位置を返す(un) "valueAt"は "keyAt"の項目がチェックされているかどうかを返します。 – Deucalion

答えて

0

アダプタでnotifyDataSetChanged()メソッドを使用する必要があります。これにより、SparseBooleanArrayが更新されます。今はアイテムをチェックしたりチェックを外したりしています。バッキングデータ構造はあなたが何をしているのか分かりません。 adapter.notifyDataSetChanged()を使用するか、アダプター・クラスのメソッドをオーバーライドして直接呼び出すことで、アダプターを介して呼び出すことができます。

+0

私はそれをやる方法を理解しました。今私は、リストが選択されたものを覚えておき、リストが開かれたときにチェックされたアイテムを表示したい。以前チェックした項目をファイルに保存していました。リストを開いたときにこれらのアイテムをチェックするにはどうしたらいいですか? –

+0

リストアイテムを追跡し、チェックリスト項目と位置をファイルから取得し、onClick内のシングルトンを更新してからファイルに再度書き込むシングルトンクラスのListManagerを持っていますか? – sturrockad

関連する問題