Android 按音量增大键时更新文本视图
我是android新手,请帮我找到这个问题的答案 当用户点击音量增大按钮时,我需要更新我的android应用程序的TextView,每次用户点击按钮时,计数必须增加,如1,2,3,4,5。。。 为此,我做了如下工作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();
@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);
}