【问题标题】:Update TextView when volume up key is pressed按下音量增大键时更新 TextView
【发布时间】:2014-11-20 12:20:59
【问题描述】:

我是android新手,请帮我解决这个问题。

当用户单击音量增大按钮时,我需要更新我的 android 应用程序的 TextView,每次用户单击该按钮时,计数必须像 1、2、3、4、5... 为此我做了如下操作

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
        int action = event.getAction();
        int keyCode = event.getKeyCode();
            switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
                if (action == KeyEvent.ACTION_DOWN) {

                    int current =  Integer.parseInt((String)counter_view.getText());
                    counter_view.setText(current+1+"");

                }
                return true;
            default:
                return super.dispatchKeyEvent(event);
            }
        }

此代码正在运行,但问题是 textview 更新速度非常慢,如果我连续按下按钮,则更新 textview 需要很少的时间。有没有其他方法可以做到这一点?

【问题讨论】:

  • 嘿...@programr....你注意到了吗,case KeyEvent.KEYCODE_VOLUME_UP: 当你点击音量增大时会被触发..那么你怎么能检查它里面的 if() ?
  • 你试过action == KeyEvent.ACTION_UP吗?
  • 各位,我对按键事件没有任何问题。仅关于更新 TextView
  • @BadAttemtsFirst 我已经引用了此链接中的代码stackoverflow.com/questions/2874743/…
  • 您可以使用runOnUiThreadAsyncTask 直接在UI 线程中更新组件。

标签: android android-asynctask textview


【解决方案1】:

尝试在 runOnUiThread() 中更新文本视图:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
   switch (event.getKeyCode()) {
     case KeyEvent.KEYCODE_VOLUME_UP:
          if (event.getAction() == KeyEvent.ACTION_DOWN) {
              runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
                   int current =  Integer.parseInt((String)counter_view.getText());
                   counter_view.setText(current+1+"");        
                 }
              });
          }
          return true;
     default:
          return super.dispatchKeyEvent(event);
    }
 }

【讨论】:

  • 嗨@Haresh你能把它写成完整的格式吗?
  • @programr,现在检查更新的答案,并始终练习不要使用不需要的变量。
  • @programr,很高兴为您提供帮助。
  • @programr,如果对你有用,你也可以投票赞成,这样它可能有助于解决同样的问题。
【解决方案2】:
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(KEYCODE_VOLUME_UP==keyCode)
        {
            //do what you want to do here
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

在这种情况下,您的关键事件将很快被检测到,您也可以快速更改您的文本框值。 只需在 KEYCODE_VOLUME_UP 中输入调高音量的键码,因此每次按下该键时,您的文本框值都不会更改,并且您的音量应用程序功能届时将不起作用,因为我们 返回 true 而不是父类事件

【讨论】:

    【解决方案3】:

    尝试类似:

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        int action = event.getAction();
        int keyCode = event.getKeyCode();
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
                if (action == KeyEvent.ACTION_UP) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            int current = Integer.parseInt((String) counter_view.getText());
                            counter_view.setText(current + 1);        
                        }
                    });
                }
                return true;
            default:
                return super.dispatchKeyEvent(event);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多