0
我有一个自定义的CursorAdapter,它为bindView(newView中的布局实现Checkable接口)内的OnCheckedChangeListener设置处理程序。 '=>'是scala中的匿名函数语法:当使用触摸UI的处理程序时,可检查不触发
def setTaskCheckboxToggleListener() = {
val v = view.findViewById(R.id.taskCheckbox).asInstanceOf[CheckBox]
v.setOnCheckedChangeListener(
(buttonView: CompoundButton, isChecked: Boolean) => {
handler(buttonView, isChecked)
}
)
}
该适配器与listView一起使用。现在的处理程序中包含使用ListView的活动设置一次:
listView.setAdapter(Tasks.adapter(context))
listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
listView.getAdapter().registerCheckBoxStateChangeHandler((buttonView: CompoundButton, _) => {
findViewById(R.id.commandButton).astInstanceOf[Button].setText("✓")
}
这个处理器由于某种原因阻止复选框被触发。相比之下,该复选框仅适用于空处理程序或处理程序,它不会在UI元素上调用.setText。这里可能是什么问题?在适配器中使用
可勾选的布局,在res xml文件/都有一个复选框元件:
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.{CheckBox, Checkable, CheckedTextView, RelativeLayout}
class TaskLayout(context: Context, attrs: AttributeSet)
extends RelativeLayout(context, attrs) with Checkable {
private var checkbox: CheckBox = _
override def onFinishInflate(): Unit = {
super.onFinishInflate();
for (i <- 0 to getChildCount()) {
val v = getChildAt(i)
if (v.isInstanceOf[CheckBox])
checkbox = v.asInstanceOf[CheckBox];
}
}
override def isChecked(): Boolean = {
if (checkbox != null)
checkbox.isChecked()
else
false
}
override def setChecked(checked: Boolean) =
if (checkbox != null) checkbox.setChecked(checked)
override def toggle() =
if (checkbox != null) checkbox.toggle();
}