Android - Удерживайте кнопку для повторения действия

Доброе утро,

Я сразу признаю, что я новичок в разработке и пытаюсь моя рука в Android. Я пытался поискать в сети, чтобы найти совет о том, как реализовать некоторую «кнопку удержания для повторения действия» - я создал настраиваемую цифровую клавиатуру из кнопок и хочу поведение, подобное backspace. уже, Я позвонил другу, который раньше не кодировал Android, но много работал с C # / Java и, кажется, знает, что делает.

Приведенный ниже код работает отлично, но я чувствую, что это можно было бы сделать более аккуратно. Прошу прощения, если я пропустил кое-что, но, надеюсь, это объясняет мой подход. Я думаю, что onTouchListener в порядке, но способ обработки потоков кажется неправильным.

Есть ли лучший или более простой способ сделать это?

Спасибо,

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
}
51
задан Mark 26 November 2010 в 03:09
поделиться