我有一个Preference
启用同步适配器,并在切换时需要一段时间来实际工作.因此,当用户单击时Preference
,我会关闭AsyncTask来完成工作.在此期间,我禁用Preference
并替换复选框与不确定ProgressBar
.我所有这一切都是通过一个涉及一个子类的黑客CheckBoxPreference
来覆盖它的ProgressBar
顶部CheckBox
.呸.
该android:widgetLayout
属性似乎就是为此而设计的.我应该可以android:widgetLayout
用来指定默认值的替换CheckBox
.所述替换将实现Checkable
并使用a ViewSwitcher
在a CheckBox
和a 之间适当地切换ProgressBar
.
唯一的问题是CheckBoxPreference
,在其onBindView()
方法中,似乎忽略了可能android:widgetLayout
使用的可能性.它明确地这样做:
View checkboxView = view.findViewById(com.android.internal.R.id.checkbox);
Run Code Online (Sandbox Code Playgroud)
这实际上使得无法交换自定义Checkable
通道android:widgetLayout
并使其实际工作.
这是一个疏忽/错误CheckBoxPreference
,还是我误解了android:widgetLayout
?是否有更清洁的预期方式来做我想做的事情?
我有一个基本上是3元组的一般状态,以及许多函数,每个函数都涉及该状态的一部分.我正在尝试为这些函数设计一组通用适配器,以便我可以在状态monad管道中使用它们.
这可能完全是错误的; 随意做出这种情况.
我提前为Java和pidgin Scala的混合道歉.我实际上是用Java作为学习练习,但是没有人有时间阅读这些内容.为了讨论,我已经省略了许多无趣的复杂性; 不要担心域建模.
有问题的国家是这样的:
ImportState(row:CsvRow, contact:Contact, result:ImportResult)
Run Code Online (Sandbox Code Playgroud)
ImportResult
是一个ADD
,MERGE
或REJECT
.
我定义的功能是这些:
def rowToContact: ImportRow => Contact
def findMergeCandidates: Contact => (Contact, List[Contact])
// merges, or declines to merge, setting the result
def merge: (Contact, List[Contact]) => (Contact, ImportResult)
def persist: Contact => ImportResult
def commitOrRollback: ImportState => ImportState
def notifyListener: ImportState => Nothing
Run Code Online (Sandbox Code Playgroud)
到目前为止我定义的适配器非常简单,并处理以下各项属性ImportState
:
def getRow: ImportState => ImportRow
def getContact: ImportState => Contact
def setRow(f: _ => ImportRow): ImportState …
Run Code Online (Sandbox Code Playgroud)