【问题标题】:android: Activity starts 2 times with OnTouchListener()android: Activity 使用 OnTouchListener() 启动 2 次
【发布时间】:2012-08-02 17:29:50
【问题描述】:

我有一个用于长按下状态按钮的动作类。它真的很好用!

但是有人知道为什么在这个代码块中我的活动开始了 2 次吗?当我按下后退按钮时,我必须这样做 2 次。

感谢您的帮助!


这是我的 java 代码:

   Button MenuBtnStart;  

   final Handler handlerBtnStart = new Handler();

          MenuBtnStart.setOnTouchListener(new OnTouchListener() {
          public boolean onTouch(final View v, MotionEvent event) {

          MenuBtnStart.setBackgroundDrawable(getResources().getDrawable(R.drawable.hover));

                 v.setPressed(true);

                 handlerBtnStart.postDelayed(new Runnable() {

                           public void run() {

                            Intent myIntent = new Intent(TextActivity.this, NextActivity.class);
                            TextActivity.this.startActivity(myIntent);

                        v.setPressed(false);

                    }

                }, 900);  // end of Handler new Runnable()

                 return true;
          } 

 });  // end of OnTouchListener()

【问题讨论】:

    标签: android


    【解决方案1】:

    只有当动作是DOWN时才应该激活它;在此之后可能会有MOVEUP 操作,这将再次激活它。

    final Handler handlerBtnStart = new Handler();
    
    MenuBtnStart.setOnTouchListener(new OnTouchListener() {
    
        public boolean onTouch(final View v, MotionEvent event) {
            int action = event.getAction() & MotionEvent.ACTION_MASK;
    
            if (action == MotionEvent.ACTION_DOWN) { 
                MenuBtnStart.setBackgroundDrawable(getResources().getDrawable(R.drawable.hover));
    
                v.setPressed(true);
    
                handlerBtnStart.postDelayed(new Runnable() {
    
                    public void run() {
    
                        Intent myIntent = new Intent(ThisActivity.this, NextActivity.class);
                        ThisActivity.this.startActivity(myIntent);
    
                        v.setPressed(false);
    
                    }
    
                }, 900);  // end of Handler new Runnable()
    
                return true;
            }
    
            return false;
        }
    
    });  // end of OnTouchListener()
    

    【讨论】:

    • 我现在得到一个未捕获的异常错误,还有什么问题?非常感谢 4 的帮助!
    • 你能把完整的 LogCat 放到 pastebin 上并链接到这里吗?
    • 该错误不是此代码的结果。您应该关闭此问题(通过接受答案),并使用来自 at.oneclickahead.WorldQuizzer.GameActivity 的代码以及这些日志开始一个新线程。
    • 错误是,ACTION 参数设置为 DOWN,但它应该设置为 UP,然后才能正常工作。
    【解决方案2】:

    我认为它在 onKeyUp()onKeyDown() 上都被调用 - 这些是您应该覆盖的方法,而不是 onTouch()

    编辑:

    我没有仔细阅读 - 你是在长时间点击之后,我一开始没有得到它。我曾经收到类似问题的一个很好的答案。看看:How to access menu button on long click.

    【讨论】:

    • 不,这是不正确的。这是一个正常的onTouch情况,有一个更长的状态的运动类,但不是按下(点击)
    【解决方案3】:

    您应该处理 ACTION_DOWN 事件。

    if (event.getAction() == MotionEvent.ACTION_DOWN){
    
    // Do Something
    }
    return true;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2013-08-12
      • 2021-03-27
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      相关资源
      最近更新 更多