【发布时间】:2010-11-26 09:58:13
【问题描述】:
我会直接承认,我是开发新手,并且正在尝试使用 Android。我一直在尝试搜索“网络”以找到有关如何实现一些“按住按钮以重复操作”的建议 - 我已经从按钮创建了一个自定义小键盘并想要一个类似退格的行为。到目前为止,我拜访了一位以前没有编写过 Android 代码但做过很多 C#/Java 并且似乎知道他在做什么的朋友。
下面的代码工作得很好,但我觉得它可以做得更整洁。如果我遗漏了一些内容,我深表歉意,但希望这能解释我的方法。我觉得onTouchListener还可以,但是Threads的处理方式感觉不太对。
有没有更好或更简单的方法来做到这一点?
public class MyApp extends Activity {
private boolean deleteThreadRunning = false;
private boolean cancelDeleteThread = false;
private Handler handler = new Handler();
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//May have missed some declarations here...
Button_Del.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
{
handleDeleteDown();
return true;
}
case MotionEvent.ACTION_UP:
{
handleDeleteUp();
return true;
}
default:
return false;
}
}
private void handleDeleteDown() {
if (!deleteThreadRunning)
startDeleteThread();
}
private void startDeleteThread() {
Thread r = new Thread() {
@Override
public void run() {
try {
deleteThreadRunning = true;
while (!cancelDeleteThread) {
handler.post(new Runnable() {
@Override
public void run() {
deleteOneChar();
}
});
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(
"Could not wait between char delete.", e);
}
}
}
finally
{
deleteThreadRunning = false;
cancelDeleteThread = false;
}
}
};
// actually start the delete char thread
r.start();
}
});
}
private void handleDeleteUp() {
cancelDeleteThread = true;
}
private void deleteOneChar()
{
String result = getNumberInput().getText().toString();
int Length = result.length();
if (Length > 0)
getNumberInput().setText(result.substring(0, Length-1));
//I've not pasted getNumberInput(), but it gets the string I wish to delete chars from
}
【问题讨论】:
-
这看起来不像是个问题。代码看起来没问题。不过。
-
同意,问题是是否有更好的、Android 特定的方法来做到这一点。感觉像很多代码来实现如此微不足道的事情。
标签: android handler ontouchlistener