2011-03-21 4 views
0

여러 선택을 허용하고 오른쪽에 체크 박스를 표시하는 ActivityList로로드하는 사용자 지정 개체 목록이 있습니다. 이러한 사용자 정의 객체에는 "enabled"라는 필드가 있습니다. 데이터를로드 할 때 개체 목록을 스크롤하고 사용 필드가 true로 표시된 개체를 나타내는 각 행의 확인란을 선택합니다. 현재 내가 원하는대로 ActivityList에로드되는 모든 레코드가 있지만 "사용 가능"으로 표시된 경우에도 행을 "선택"할 수 없습니다. 직접 setListAdapter를 호출 한 후이 코드를 넣어 가지고 미리 선택된 행이있는 ActivityList로드

for (int i = 0; i < sourceList.length; i++) { 
    DataSource d = sourceList[i]; 
    view.getChildAt(i).getClass().toString()); 
    CheckedTextView checkView = (CheckedTextView)view.getChildAt(i); 
    checkView.setChecked(Boolean.parseBoolean(d.enabled)); 
} 

을 확인하고 나는 onContentChanged() 함수에 넣어대로

내가 행을 표시하기 위해 사용하고있는 코드입니다. 그러나 두 위치 모두에서 행이 아직 표시되지 않으므로 view.getChildAt (i)는 null을 반환하므로 행이 검사되지 않습니다.

누구나이 코드를 어디에 넣을 수 있는지 알려주시겠습니까? 그러면 모든 행이 추가되고 화면에 표시된 후에 실행될 수 있습니까?

감사합니다.

원래 ArrayAdapter를 사용하고 있던 사용자 지정 어댑터가 없었습니다. getView() 메서드를 재정의 (override)하기 위해서, 커스텀 어댑터와 확장 된 ArrayAdapter를 작성했습니다. ArrayAdapter 클래스가 대부분의 작업을 수행하도록 허용하고 있지만 getView()를 재정의하고 있습니다. 여기의 getView (내 코드)에도 확인란이 코드 없음에

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    convertView = super.getView(position, convertView, parent); 

    if (convertView.getClass() == CheckedTextView.class){ 
     CheckedTextView checkView = (CheckedTextView)convertView; 
     DataSource d = getItem(position); 
     checkView.setText(d.getName()); 
     checkView.setChecked(Boolean.parseBoolean(d.enabled)); 
    } 

    return convertView; 
} 

이 확인되고있다. 데이터 소스의 이름 필드가 텍스트로 설정되어 있지만 setChecked() 메소드가 작동하지 않는 것 같습니다. 나는 또한 열심히 코딩을 시도했다.

checkView.setChecked(true); 

그건 나에게도 효과가 없었다. 내가 잘못하고있는 것에 대한 아이디어가 더 있으십니까?

다시 한번 감사드립니다!

답변

0

어댑터 코드를 표시 할 수 있습니까? setChecked으로 전화를 걸 수있는 곳은 어댑터의 getView 코드입니다.

@Override 
getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(
      R.layout.my_list_row, parent, false); 
    } 
    CheckedTextView checkView = (CheckedTextView) 
     convertView.findViewById(R.id.check_view); 
    DataSource d = sourceList[i]; 
    checkView.setChecked(Boolean.parseBoolean(d.enabled)); 
    return convertView; 
} 

ListView에 정말 getChildAt를 통해 아이를 노출하지 않습니다 뭔가처럼이 될 것입니다. 의도 된 인터페이스는 행을 구성하고 채우는 것입니다 (getView).

0

getView 메서드 (myListListView 인 인스턴스)에서 myList.setItemChecked(position, Boolean.parseBoolean(d.enabled));을 호출해야합니다.

또한 목록 어댑터를 설정하기 전에 myList.setChoiceMode(int choiceMode)을 호출했는지 확인하십시오. 다른보기 내부 Checkable 전망이있는 경우

는 다음이 포함 뷰가 제대로 작동하려면 목록에 체크 할 항목뿐만 아니라 Checkable를 구현해야

를 (예를 들어 CheckableRelativeLayout 참조)
관련 문제