在我们的应用程序中,我们通过按钮来处理事件以记录数据。
因此,最初,当我将setOnLongClickListener()setOnClickListener()与同一个按钮一起使用时,对我们来说效果很好。
这意味着它将基于按钮的click和LongClick调用此监听器。现在,当我尝试使用带有相同按钮的setOnTouchListener()以及setOnLongClickListener()setOnClickListener()时,只有OnTouch事件有效,其余onclick和onLongclick事件无效。
谁能告诉我为什么会这样,如果可能的话请举例说明。
我使用的代码:

Button btnAdd=new Button(this)

btnAdd.setOnLongClickListener(this);

btnAdd.setOnClickListener(this);

btnAdd.setOnTouchClickListener(this);

public void onClick(View v)
{
    //Statements;
}

public void onLongClick(View v)
{
    //Statements;
}

public boolean onTouch(View v, MotionEvent e)
{
    switch (e.getAction())
    {
        case MotionEvent.ACTION_DOWN:
        {
            //store the X value when the user's finger was pressed down
            m_downXValue = e.getX();
            break;
        }

        case MotionEvent.ACTION_UP:
        {
            //Get the X value when the user released his/her finger
            float currentX = e.getX();
            //MotionEvent x=MotionEvent.obtain((long) m_downXValue,  SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 1, 1, 1, 1,0, 0, 0, 0, 0);

            // going forwards: pushing stuff to the left
            if (m_downXValue > currentX && currentX < 0)
            {
                ViewFlipper vf = (ViewFlipper) findViewById(R.id.flipview);
                vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_left));


                vf.showNext();

            }

            // going backwards: pushing stuff to the right
            if (m_downXValue < currentX && currentX > 100)
            {
                ViewFlipper vf = (ViewFlipper) findViewById(R.id.flipview);
                vf.setAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right));


                vf.showPrevious();

            }

            if (m_downXValue == currentX)
            {
                onClick(v);
            }

            break;
        }
    }
    return true;
}

最佳答案

根据文档Handling UI Events



最重要的是onTouch:



实际上,根据事件,您必须返回正确的值。

10-07 20:50