2013-02-20 24 views
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(); 
} 

回答

0

注释掉listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE)解决了这个问题。