1

我无法检测 MotionEvent.ACTION_MOVE 和 MotionEvent.ACTION_UP 事件。我打算在您按住时有一个按钮,它会自动减小关联的值,但是由于无法检测到 UP 事件,因此我在编码中还没有达到这一点。

for (int position = 0; position < mListItems.size(); position++) {
    LayoutInflater inflater = getLayoutInflater();
    PilotSkillRow row = (PilotSkillRow) inflater.inflate(R.layout.pilotskillrow, mSkillListView, false);
    Button skillminus = (Button) row.findViewById(R.id.skillminus);
    skillminus.setOnTouchListener(new SkillButtonTouchListener(position, false));
    ....
}

我理解在触摸事件上返回 true 意味着稍后的触摸事件(例如 ACTION_MOVE 和 ACTION_UP)应该触发。

private class SkillButtonTouchListener implements OnTouchListener {

    public SkillButtonTouchListener(int pos, boolean plus) {
         ...
    }

    public boolean onTouch(View view, MotionEvent motionevent) {
        int action = motionevent.getActionMasked();

        switch (action)
        {
            case MotionEvent.ACTION_MOVE:
                Log.e("a", "MOVE EVENT");
                ....
                return true;

            case MotionEvent.ACTION_UP:
                Log.e("a", "UP EVENT");
                ....
                break;

            case MotionEvent.ACTION_DOWN:
                Log.e("a", "DOWN EVENT");
                ....
                return true;
            default:
                break;
            }
            return false;
        }
    }

但是,当我运行代码时,它甚至会显示 DOWN,但 MOVE 和 UP 事件根本不会显示。这可能与我的布局膨胀有关吗?

有人知道我做错了什么吗?

更新:如果我使用 android 调试器连接到按钮以检查正在发生的事情,则在按下按钮后单步执行时会触发 UP 事件。可能是因为有另一个进程消耗了 UP 事件?

更新 2:问题是膨胀布局内的文本视图拒绝更新。当我在适配器上执行无效事件时,它将停止当前处理的触摸事件(无错误)。我有另一个文本视图,我可以在不需要适配器的情况下手动更新它,这不会导致任何问题。所以这似乎是一个针对RelativeLayout的问题。我有一个解决方法,只在 ACTION_UP 事件期间使数据无效,但我宁愿即时更新 textview。

4

0 回答 0