2013-02-20 29 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)解決了這個問題。