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();
}