2012-01-10 6 views
0

주 활동에서 목록을 생성하는 앱이 있는데 주요 활동에는 목록을 필터링하고 사용자 지정 목록보기 확인란에 전체 목록의 하위 집합을 나열하는 여러 탭이 있습니다.다른 활동의 목록 필터링

각 탭에 어댑터가 있고 주 목록을 필터링하고 해당 하위 집합을 자체 어댑터에 추가하는 다양한 onCreate()에서 스레드가 실행됩니다. 상자를 체크 할 때마다 체크 박스 상태를 SharedPreferences에 저장합니다.

다양한 ListActivities 중에서 확인란을 동기화하는 데 문제가 있습니다. 1 ListActivity에서 상자를 체크하고 다른 탭으로 전환하면 거기에 업데이트되지 않습니다. 앱을 종료하고 다시 시작하면 주 활동이 목록을 다시 생성하고 SharedPreferences를 읽고 모든 체크 박스를 업데이트합니다.

다양한 탭의 다양한 ListActivities가 항상 동기화되도록하려면 어떻게해야합니까?

감사합니다.

답변

0

필자는 어댑터에서 필터를 사용하는 것이 좋습니다. 즉, 확인란을 선택하여 읽는 필터를 구현하는 것이 좋습니다. 이렇게 많은 쓰레드를 가지는 것은 : a) 프로그래머에게는 혼란 스럽습니다. b) 동기화 문제의 원인. 모든 ArrayAdapter는 Filterable 인터페이스를 구현하며 getFilter() 메서드를 재정 의하여 자신의 필터를 반환 할 수 있습니다. 이 필터에서는 필요한 요소를 필터링 할 수 있습니다. 이 게시물이 도움이 될 것 같습니다 : How to write a custom filter for ListView with ArrayAdapter. 구현하는 각 필터의 ​​설정을 읽어야 할 것입니다.

+0

감사합니다. CharSequence 대신 int 값을 기반으로 필터를 구현하는 방법은 무엇입니까? performFiltering() 및 publishResults()는 CharSequence 매개 변수 만 허용합니다. – user1118764

+0

또한 다른 활동에서 정의되거나 초기화 된 어댑터에 어떻게 액세스합니까? 나는 SetListAdapter()에 다른 액티비티의 어댑터를 전달하여 그렇게하려고 시도했지만 getCount()가 완전히 채워 졌음에도 불구하고 빈 목록을 얻었다. 디버깅 한 결과 어댑터의 getView()가 전혀 호출되지 않은 것으로 나타났습니다. – user1118764

+0

확실한 방법의 서명을 변경할 수 없습니다. 하지만 당신이 필요하다고 생각하지 않습니다 - 내가 제대로 당신이 전달 된 값 무시하고 설정에서 int를 읽을 수 있습니다. 내가 틀렸어도 여전히 값을 전달해야한다면 String.valueof (your_int)를 사용하고 Integer.valueOf (char_seq.toString())를 통해 메소드에서 비 직렬화 할 수 있습니다. –