小编log*_*anj的帖子

通过android:widgetLayout自定义CheckBoxPreference

我有一个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?是否有更清洁的预期方式来做我想做的事情?

android preference

9
推荐指数
2
解决办法
4989
查看次数

州monad - 适应仅与州的部分地区合作的功能?

我有一个基本上是3元组的一般状态,以及许多函数,每个函数都涉及该状态的一部分.我正在尝试为这些函数设计一组通用适配器,以便我可以在状态monad管道中使用它们.

这可能完全是错误的; 随意做出这种情况.

我提前为Java和pidgin Scala的混合道歉.我实际上是用Java作为学习练习,但是没有人有时间阅读这些内容.为了讨论,我已经省略了许多无趣的复杂性; 不要担心域建模.

有问题的国家是这样的:

ImportState(row:CsvRow, contact:Contact, result:ImportResult)
Run Code Online (Sandbox Code Playgroud)

ImportResult是一个ADD,MERGEREJECT.

我定义的功能是这些:

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)

monads state haskell functional-programming scala

5
推荐指数
1
解决办法
734
查看次数