我有一个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)