我有一个启用同步适配器的Preference,当被切换时,需要一段时间才能真正完成它的工作。因此,当用户单击Preference时,我停止使用AsyncTask来完成这项工作。同时,我禁用了Preference,并用不确定的ProgressBar替换了该复选框。我通过一个涉及覆盖在CheckBox之上的ProgressBar的CheckBoxPreference子类的黑客攻击实现了这一切。糟透了。
android:widgetLayout属性似乎就是为此而设计的。我应该能够使用android:widgetLayout来指定默认CheckBox的替代项。所述替换将实现Checkable并使用ViewSwitcher在CheckBox和ProgressBar之间适当地切换。
唯一的问题是,CheckBoxPreference在其onBindView()方法中似乎忽略了可能使用android:widgetLayout的可能性。它明确地做到了这一点:
View checkboxView = view.findViewById(com.android.internal.R.id.checkbox);这实际上使得通过android:widgetLayout交换自定义Checkable并使其实际工作变得不可能。
这是CheckBoxPreference中的疏忽/错误,还是我误解了android:widgetLayout?有没有一种更干净的方式来做我想做的事情?
发布于 2012-03-04 23:43:21
首先,我同意您的观点,Android应该将代码块重构为可以被subclass.
@android:id/checkbox的复选框(
view.findViewById(com.android.internal.R.id.checkbox); )。
<CheckBoxPreference
android:key="autostart"
android:widgetLayout="@layout/customlayout" />
在customlayout.xml中:
<SwitchView>
...
<CheckBox>
android:id="@android:id/checkbox“
android:layout_width="wrap_content“
android:layout_height="wrap_content“
Android:text=“我的检查”
android:clickable="false“
android:focusable="false"
android:focusableInTouchMode="false"
</CheckBox>
值得注意的是,checkbox的可聚焦属性必须设置为false (我猜CheckBoxPreference的默认布局也做同样的事情),以便列表更新程序接收事件,而不是checkbox本身。我猜你的尝试没有成功,只是因为你没有设置可聚焦的状态。
greensuisse
发布于 2010-09-01 21:24:09
android:widgetLayout是首选项的正确部分。在CheckBoxPreference中,widgetLayout就是复选框。如果您采用基本首选项并在widgetLayout中放置一个ViewSwitcher,它应该可以工作
https://stackoverflow.com/questions/3618172
复制相似问题