在我的闹钟应用中: 主要活动包含一个列表视图,其中包含文本视图和切换按钮,我已应用于已检查的更改侦听器。每当我打开或关闭一个警报时,它会显示一条消息"警报开启"或"闹钟关闭"。但当我向下滚动然后向上滚动时,同样的消息再次出现。如果我继续向下滚动然后向上再次显示该消息。似乎在滚动时一次又一次地执行on checked change listener中的代码。请告诉我如何解决这个问题。我不想在滚动时一次又一次地在已检查的更改侦听器上执行代码。
答案 0 :(得分:0)
请勿使用checked change listener
。尝试获取开关的onclicklistener
并按此检查
yourswitch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
yourswitch.setChecked(!yourswitch.getChecked());
// update your data model if needed.
}
});
您正面临这个问题,因为当您在特定视图进入内存时滚动列表时,它会尝试根据您的数据模型检查或取消选中您的开关,因此checkedChange listener
会一次又一次地调用。
适用于SwitchDrag案例。
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
yourswitch.setChecked(!yourswitch.getChecked());
// update your data model if needed.
break;
case MotionEvent.ACTION_DOWN:
break;
}
return true;
}
});
尝试实施onTouchLisrtener
。我相信当用户拖动开关并抬起手指时,case MotionEvent.ACTION_UP
会被调用。