listview with switch和on checked change listener issue

时间:2015-06-08 06:58:24

标签: android listview event-handling

在我的闹钟应用中: 主要活动包含一个列表视图,其中包含文本视图和切换按钮,我已应用于已检查的更改侦听器。每当我打开或关闭一个警报时,它会显示一条消息"警报开启"或"闹钟关闭"。但当我向下滚动然后向上滚动时,同样的消息再次出现。如果我继续向下滚动然后向上再次显示该消息。似乎在滚动时一次又一次地执行on checked change listener中的代码。请告诉我如何解决这个问题。我不想在滚动时一次又一次地在已检查的更改侦听器上执行代码。

1 个答案:

答案 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会被调用。