Matin tous,Android - Tenez le bouton pour répéter l'action
Je vais admettre tout de suite que je suis nouveau au développement et en essayant ma main sur Android. J'ai essayé de chercher sur le net pour trouver des conseils sur la façon d'implémenter certains "Hold Button pour répéter l'action" - J'ai créé un pavé numérique personnalisé à partir des boutons et je veux un comportement de retour arrière. Ayant eu jusqu'ici, j'ai fait appel à un ami qui n'a pas codé Android auparavant, mais qui a fait beaucoup de C#/Java et semble savoir ce qu'il fait.
Le code ci-dessous fonctionne très bien, mais je pense que cela pourrait être fait plus soigneusement. Je m'excuse si j'ai raté des morceaux, mais j'espère que cela explique mon approche. Je pense que le onTouchListener est correct, mais la façon dont les threads sont gérés ne se sent pas bien.
Existe-t-il une façon meilleure ou plus simple de faire cela?
Merci,
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
}
Cela ne ressemble pas vraiment à une question. Le code semble o.k. bien que. –
D'accord, la question est de savoir s'il existe une meilleure façon spécifique pour Android de le faire. Il se sent comme beaucoup de code pour réaliser quelque chose d'aussi trivial. – Mark