Morgen alleAndroid - Halten Sie die Taste zum Wiederholen der Aktion
Ich werde sofort zugeben, dass ich neu in der Entwicklung bin und meine Hand bei Android versuchen. Ich habe versucht, das "Netz zu finden, um Rat zu finden, wie man etwas" Hold-Knopf-zu-Wiederholen-Aktion "implementiert - ich habe ein kundenspezifisches Numpad von Knöpfen geschaffen und möchte ein Backspace-ähnliches Verhalten. Nachdem ich so weit gekommen bin, habe ich einen Freund angerufen, der vorher noch kein Android programmiert hat, aber viel C#/Java gemacht hat und zu wissen scheint, was er macht.
Der untenstehende Code funktioniert gut, aber ich denke, es könnte besser erledigt werden. Ich entschuldige mich, wenn ich etwas verpasst habe, aber das erklärt hoffentlich meinen Ansatz. Ich denke, der onTouchListener ist in Ordnung, aber die Art, wie Threads behandelt werden, fühlt sich nicht richtig an.
Gibt es einen besseren oder einfacheren Weg, dies zu tun?
Danke,
M
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
}
Das ist nicht wirklich wie eine Frage aussieht. Der Code sieht o.k. obwohl. –
Einverstanden, die Frage ist, ob es eine bessere, Android-spezifische Möglichkeit gibt, es zu tun. Es fühlt sich an wie viel Code, um etwas so Triviales zu erreichen. – Mark