2011-04-06 2 views
3

약 200 개의 항목이있는 목록보기가 있습니다. 확인란 맞춤형 ArrayAdapter를 구현했습니다. SparseBooleanArray를 사용하여 상자 값을 저장합니다.안드로이드 - ListView : 선택하지 않은 체크 박스

이 모든 것은 정상적으로 작동하지만 그래픽으로 상자 검사를 업데이트 할 수 없습니다. 사용자가 클릭하면 상자가 선택됩니다. 하지만, 내 코드에서 setChecked를 호출하면 상자 자체에 아무런 영향을 미치지 않습니다. 따라서 해당 값이 true 인 경우에도 똑딱 거리지 않습니다.

모든 체크 박스를 true로 설정하고 행운을 시험해 보았습니다. 테스트를 거쳤음에도 불구하고 실제로 표시되지는 않았습니다.

class CheckBoxArrayAdapter extends ArrayAdapter<String> implements CompoundButton.OnCheckedChangeListener { 
private SparseBooleanArray checkedBoxes; 
Context context; 

public CheckBoxArrayAdapter(Context context, int resource, List<String> objects) { 
    super(context, resource, objects); 
    checkedBoxes = new SparseBooleanArray(); 
    this.context = context; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final CheckBox view = (CheckBox) super.getView(position, convertView, parent); 
     //if(convertView == null) { 
      //convertView = view.inflate(context, R.layout.list_item, null); 
     //} 
    view.setTag(position); 
    view.setChecked(checkedBoxes.get(position, false)); 
    System.out.println(view.getTag() + ": " + view.isChecked()); 
    view.setOnCheckedChangeListener(this); 
    return view; 
} 

public boolean isChecked(int position) { 
    return checkedBoxes.get(position, false); 
} 
public void setChecked(int position, boolean isChecked) { 
    checkedBoxes.put(position, isChecked); 
    notifyDataSetChanged(); 
} 

public void toggle(int position) { 
    setChecked(position, !isChecked(position)); 
} 

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    checkedBoxes.put((Integer) buttonView.getTag(), buttonView.isChecked()); 
} 

}

감사들 : 당신이 볼 필요하지만 좋은 측정을 내 어댑터에 차버 무슨 코드가 확실하지! 좋아

+0

언급 할만한 가치가 없을 수도 있지만, XML에서 사용할 수 있도록 확인란을 설정해도 아무것도 표시되지 않았습니다. 단조 로움을 놓치고 있지만 꼭 볼 수는 없습니다. –

+0

호기심에서 ListView에서 다중 선택 지원 기능을 사용하지 않는 이유는 무엇입니까? http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:choiceMode –

+0

android : choiceMode를 객관식으로 추가했지만 사용자 정의 어댑터를 사용하는 것이 일반적인 합의처럼 보였습니다. 안드로이드 애플 리케이션의 대부분은 체크 박스를 통합하는 것 같았다. –

답변

2

는 검사 텍스트보기 목록의 항목으로이를 사용, 그 일을하는 가장 좋은 방법 것 같습니다이 리스너로 :

  public void onItemClick(AdapterView<?> parent, View view, int pos,long id) 
     { 
      if(!isChecked.get(pos)) { 
       messageList.setItemChecked(pos, true); 
       isChecked.put(pos, true); 
      }else{ 
       messageList.setItemChecked(pos, false); 
       isChecked.put(pos, false); 
      } 
      //sendEmail("[email protected]", address.get(pos) + ": " + subject.get(pos), Jsoup.parse(message.get(pos)).toString()); 
     } 

내가 이전에 구글 안드로이드 개발자에 의해 주어진 사용 예 , 그래서 그것이 평범한 줄 알았다. 그러나, 여부에 상관없이,이 방법은 많이 간단합니다!