Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按音量增大键时更新文本视图_Android_Android Asynctask_Textview - Fatal编程技术网

Android 按音量增大键时更新文本视图

Android 按音量增大键时更新文本视图,android,android-asynctask,textview,Android,Android Asynctask,Textview,我是android新手,请帮我找到这个问题的答案 当用户点击音量增大按钮时,我需要更新我的android应用程序的TextView,每次用户点击按钮时,计数必须增加,如1,2,3,4,5。。。 为此,我做了如下工作 @Override public boolean dispatchKeyEvent(KeyEvent event) { int action = event.getAction(); int keyCode = event.getKeyCode();

我是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所需的时间很短。是否有其他方法可以执行此操作?

尝试在runOnUiThread()中更新textview:

尝试以下方法:

@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);
        }
    }
}
在这种情况下,您的按键事件将很快被检测到,您也可以快速更改文本框值。
只需在keycode\u volume\u up中输入音量增大的keycode,因此每次按下该键时,文本框值都不会改变,此时音量应用程序功能也不会工作,因为我们返回的是true,而不是父类事件

嘿…@programr…你注意到了吗,case KeyEvent.KEYCODE\u VOLUME\u UP:当您单击音量增大时将被触发。那么您如何检查它是否()在其中?您是否尝试过
action==KeyEvent.action\u UP
?伙计们,我对按键事件没有任何问题。只是关于更新TextView@BadAttemtsFirst我已经引用了此链接中的代码。您可以使用
runOnUiThread
AsyncTask
直接更新UI线程中的组件。您好@Haresh,您能以完整格式编写它吗?@program,现在检查更新的ans,并始终练习不要使用非必需的变量。@programr,很高兴为您提供帮助。@programr,如果ans对您有用,您也可以向上投票,以帮助解决相同的问题。
@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);
        }
    }
}
@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);
    }