2012-01-19 7 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"는 체크 된 항목 위치를 반환하고, "valueAt"는 "keyAt"의 항목이 선택되었는지 여부를 반환합니다. – Deucalion

답변

0

어댑터에서 notifyDataSetChanged() 메서드를 사용해야합니다. 그러면 SparseBooleanArray가 업데이트됩니다. 지금은 항목을 선택하고 선택을 취소하고 데이터 구조는 사용자가하는 일을 전혀 알지 못합니다. adapter.notifyDataSetChanged()에 의해 어댑터를 통해 호출하거나 어댑터 클래스의 메소드를 대체하여 직접 호출 할 수 있습니다.

+0

나는 그것을하는 방법을 이해했다. 지금 나는 목록이 전에 선택되었던 것을 기억하게하고 목록이 열렸을 때 그 항목들을 체크 표시하고 싶다. 이전에 검사 한 항목을 파일에 저장했습니다. 목록을 열 때 해당 항목을 확인하려면 어떻게합니까? –

+0

목록 항목을 추적하고, 체크리스트 항목과 위치를 파일에서 가져오고, onClick에서 싱글 톤을 업데이트 한 다음 파일에 다시 쓰는 싱글 톤 클래스 ListManager가 있습니까? – sturrockad

관련 문제