0

그룹에 대한 그룹 및 하위 항목을 동적으로로드하는 ExpandableListAdapter가 있습니다. 하위 항목을 검사하기위한 복잡한 논리를 만들 수 있기를 원합니다. 일부 하위 항목은 객관식이고 일부 항목은 단일 선택 항목입니다. 단일 선택 항목을 선택하면 모든 다중 선택 항목이 선택 취소됩니다. 객관식 항목에는 문제가 없지만 단일 선택 항목을 선택하면 항목을 선택 취소 할 수 없습니다. 어떤 조언을 환영합니다.CheckableTextView - 복합 선택 논리가 포함 된 ExpandableListAdapter

소스 코드가 포함되어 있지 않습니다. 꽤 표준이지만 요청에 따라 제공 할 수 있습니다.

+0

"여러 항목"을 어떻게 선택 해제 하시겠습니까? 변경할 수 있도록 가시적 뷰를 다시 가져와야 할 수도 있습니다. – Simas

+0

여러 항목을 선택 취소 할 수 없었습니다. 보이는보기를 어떻게 다시 가져 옵니까? –

답변

1

어떤 항목이 복수가 아닌지 표시하려면 어댑터 내부에 부울 메서드를 만듭니다. 부울 배열의 도움으로 필요한 경우 내부의 각 항목에 대한 값을 보유합니다.

그리고 당신의 getChildView의 내부

는() 당신은 단순히 당신이 필요가 어댑터에 notifyDataSetChanged()를 호출 할 수있는 표시되는 항목을 새로 고치려면

if (multiples.get(groupView).get(childView)) 
    myView.setChecked(false); 

처럼 뭔가를 할 수 있습니다.

+0

완벽하게 작동합니다. 감사합니다. 이 일에 너무 많은 시간을 보냈다는 것을 믿을 수 없습니다. –

+0

유일한 문제는 화면을 회전 한 후에도 확인란이 계속 유지되지 않는다는 것입니다. 어떻게 수정해야합니까? –

+0

모든 체크 박스의 체크 상태를 유지하기 위해 별도의 배열을 생성하고 그 배열을 정적으로 만드십시오. 또는 onSaveInstanceState를 사용하여 저장된 체크 박스를 저장하고 onCreate ** 내부에서 ** savedInstanceState가 null이 아닌 경우 체크 상자의 상태를 가져 와서 사용합니다. – Simas

0

onCheckChangeListener을 사용하고 있습니까? 그렇다면 몇 가지 문제가 발생할 수 있습니다.

첫째, 복수 선택 항목이 클릭 할 때 선택 해제되지 않으면 isChecked = false으로 onCheckChanged이 호출 될 때 명시 적으로 setChecked(false)을 호출하지 않았기 때문입니다.

단일 선택 항목을 선택할 때 선택 항목을 선택하지 않으려면 단일 선택 항목 수신기의 onCheckChanged 메서드에서 모든 다중 선택 항목에 대해 반드시 mMultiChoiceItem.setChecked(false)을 호출해야합니다.

+0

내 문제는 내가 그들을 위해 setChecked 호출 할 수 있도록 mMultipleChoiceItems 목록을 얻는 방법을 모르겠다. 나는 어댑터와 내부 활동을 시도했지만 행운은 없다. Ideal은 주어진 그룹과 자식 인덱스에 대해 mMultipleChoiceItem을 반환하는 함수입니다. –

+0

리소스 ID를 사용해야합니다. 이상적으로 모든 목록 요소보기에는 다중 선택 항목을 가리키는 동일한 ID가 포함되어야합니다. 그래서 그 뷰에 접근하기 위해'mListAdapter.getView (index, null, mListView) .findViewById (R.id.multi_choice_item)'같은 것을 시도해보십시오. 이것은 다중 선택 항목 캐스트에 대한 참조를'View'로 반환합니다. 필요한 경우 목록 어댑터를 반복하여 모든 뷰를 가져올 수 있습니다. – tep

관련 문제