2010-09-01 11 views
9

Senkronizasyon bağdaştırıcısı sağlayan bir Preference sahibim ve geçiş yaptıklarında çalışmasını gerçekten yapmak için biraz zaman alıyor. Sonuç olarak, kullanıcı Preference tıklattığında, işi yapmak için bir AsyncTask'ı kapatırım. Bu arada, Preference'u devre dışı bırakın ve onay kutusunu ProgressBar belirsiz bir şekilde değiştirin. Bunların hepsi, 'un üstündeki ProgressBar'u kaplayan CheckBoxPreference alt sınıfını içeren bir kesmek yoluyla çalışıyorum. Yuck.CheckBoxPreference'ın android aracılığıyla özelleştirilmesi: widgetLayout

android:widgetLayout özniteliği bunun için tam olarak tasarlanmış gibi görünüyor. Varsayılan CheckBox için bir değiştirme belirtmek için android:widgetLayout kullanabilmeliyim. Söz konusu ikame, Checkable'u uygulayacak ve CheckBox ile ProgressBar arasında uygun şekilde geçiş yapmak için ViewSwitcher kullanın.

Tek sorun, CheckBoxPreference, onBindView() yönteminde android:widgetLayout'un kullanılabilmesi olasılığını göz ardı etmesidir. Bu açıkça yapar:

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

Bu etkin imkansız android:widgetLayout yoluyla özel bir Checkable içinde takas ve aslında işe sahip olmayı gerekli kılar.

Bu bir CheckBoxPreference numaralı hata/hata mıdır, yoksa android:widgetLayout yanlış anlaşılmış mı? Yapmaya çalıştığım şeyi yapmak için daha temiz bir amaç var mı?

+0

Hiç bu bir çözüm buldunuz mu? Ben de vurdum. –

+0

Gerçekten değil. CheckBoxPreference'ın [alt sınıfım] ile (https://github.com/loganj/foursquared/blob/master/main/src/com/joelapenna/foursquared/preferences/ProgressCheckBoxPreference.java) sıkıştım. – loganj

cevap

0

android: widgetLayout, tercihin en doğru parçasıdır. CheckBoxPreference'da, widgetLayout onay kutusudur. Eğer bir taban Tercihi alıp widgetLayout bir ViewSwitcher koyarsanız , bu

+0

Elbette, ancak özetler ve erişilebilirlik gibi CheckBoxPreference öğelerini kaçırdım. – loganj

11
  1. İlk çalışması gerekir, ben Android olabilir "korunan yöntemini çağırarak" kod view.findViewById(com.android.internal.R.id.checkbox); parçasını planı ayrı gerektiğini size katılıyorum alt sınıf tarafından geçersiz kılındı. fikir basittir::

  2. Neyse ki, biz hala aşağıdaki gibi etrafında çalışmayı iptal edebilirler kimliğvar bir onay kutusu beyan edilir android varsayılan kimliği @android:id/checkbox

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

ve özel olarak.xml:

<SwitchView>
...
<CheckBox>

android: id = "@android: id/onay kutusu "
android: layout_width =" wrap_content"
android: layout_height = "wrap_content"
android: text =" ": tıklanabilir =
android "false"
android: odaklanabilir = "mycheck" false
android: focusab leInTouchMode = "false"
</CheckBox>

O (I CheckBoxPreference varsayılan düzeni aynı şeyi yapar sanırım) yanlış olduğu liste apdater alabilmesi için onay kutusu odaklanabilir nitelikleri ayarlanması gerekir dikkat etmek çok önemli onay kutusunun kendisinden ziyade olay. Sanırım, denemenizde başarılı olmadınız, çünkü odaklanabilir durumu ayarlamadınız.

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

+0

Harika! İşe yarıyor. Onları sahte yapmaya zorladığın için teşekkürler. – Sdghasemi

İlgili konular