2010-09-01 10 views
9

Mam Preference, który włącza adapter synchronizacji i po pewnym czasie trwa wykonywanie pracy po włączeniu. W związku z tym, gdy użytkownik klika Preference, uruchamiam AsyncTask, aby wykonać pracę. W międzyczasie wyłączę opcję Preference i zastępuję pole wyboru nieokreślonym numerem ProgressBar. Wszystko to działa przez włamanie obejmujące podklasę CheckBoxPreference, która nakłada się na ProgressBar na wierzchu CheckBox. Fuj.Dostosowywanie CheckBoxPreference przez android: widgetLayout

Atrybut android:widgetLayout wydaje się być zaprojektowany specjalnie do tego. Powinienem móc użyć android:widgetLayout, aby określić zamiennik domyślnego CheckBox. Wymieniona wymiana może zaimplementować Checkable i użyć ViewSwitcher, aby odpowiednio przełączać między CheckBox i .

Jedynym problemem jest to, że CheckBoxPreference w metodzie onBindView(), wydaje się ignorować możliwość użycia android:widgetLayout. To wyraźnie to robi:

View checkboxView = view.findViewById(com.android.internal.R.id.checkbox); 

To skutecznie uniemożliwia zamienić w zwyczaju Checkable poprzez android:widgetLayout i to rzeczywiście działa.

Czy jest to niedopatrzenie/błąd w CheckBoxPreference, czy też źle zrozumiałem android:widgetLayout? Czy istnieje jakiś zamierzony sposób na wykonanie tego, co próbuję zrobić?

+0

Czy kiedykolwiek znaleźć rozwiązanie tego? Właśnie to trafiłem. –

+0

Niezupełnie. Utknąłem z [moja podklasa] (https://github.com/loganj/foursquared/blob/master/main/src/com/joelapenna/foursquared/preferences/ProgressCheckBoxPreference.java) z "CheckBoxPreference". – loganj

Odpowiedz

0

android: widgetLayout jest właściwą częścią preferencji. W polu CheckBoxPreference jest pole wyboru widgetLayout. Zażycie preferencją bazową i umieścić ViewSwitcher w widgetLayout, to powinno działać

+0

Oczywiście, ale potem brakuje mi rzeczy, które robi CheckBoxPreference, takich jak podsumowania i dostępność. – loganj

11
  1. Po pierwsze, zgadzam się z Tobą, że Android powinna byłaby kawałek kodu view.findViewById(com.android.internal.R.id.checkbox); do „wywoływania Metoda chroniona”, który może być nadpisany przez podklasę.

  2. Na szczęście, nie jesteśmy jeszcze w stanie zastąpić pracę wokół następująco: Pomysł jest prosty: zadeklarować wyboru, który ma identyfikator jest android domyślne id @android:id/checkbox

<CheckBoxPreference
android:key="autostart"
android:widgetLayout="@layout/customlayout" />

oraz w customlayout.XML:

<SwitchView>
...
<CheckBox>

android id = "@android id/pole "
ANDROID layout_width =" wrap_content"
ANDROID layout_height = "wrap_content"
android: Text =” mycheck”
android: klikalne = "false"
androida: Regulowana = "false"
android: focusab leInTouchMode = „false”
</CheckBox>

To naprawdę ważne, aby pamiętać, że aktywowana atrybuty wyboru musi być ustawiona na false (chyba układ domyślny CheckBoxPreference robi to samo), dzięki czemu lista apdater odbiera zdarzenie, a nie samo pole wyboru. Domyślam się, że nie odniosłeś sukcesu, ponieważ nie ustawiłeś stanu, w którym można ustawić ostrość.

greensuisse
(https://sites.google.com/site/greensuisse/)

+0

Awesome! To działa. Dziękuję za wzmiankę o umieszczeniu ich w "false". – Sdghasemi