Задержка намерения после нескольких кликов?

android android-studio android-intent android-edittext onclicklistener

117 просмотра

2 ответа

97 Репутация автора

Я создаю приложение, которое последовательно задает пользователю ряд вопросов один за другим. Тем не мение. Последний вопрос, который я задаю: «Является ли информация верной?»

Мне нужно, чтобы это приглашение появилось как минимум через 3000 мс после других последовательных вопросов, чтобы пользователь сначала посмотрел на записанную информацию и выяснил, все ли правильно. Однако на данный момент, независимо от использования обработчика, последнее приглашение появляется сразу после второго последнего вопроса. Есть ли способ получить задержку не менее 3000 мс до появления окончательного приглашения?

Ниже приведена часть моего текущего кода, на который я ссылаюсь. Обратите внимание, что я пробовал обработчик как в onClick, так и в разделе onActivityResult.

Если кто-то может предоставить правильный бит кода, это будет высоко ценится.

public void onClick(View v){

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent i1 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        i1.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        i1.putExtra(RecognizerIntent.EXTRA_PROMPT, "Is the information correct? (Yes/No)");
        startActivityForResult(i1, check);
    }
}, 3000);


Intent i2 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i2.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
i2.putExtra(RecognizerIntent.EXTRA_PROMPT, "What is the current time?");
startActivityForResult(i2, checklv1);

Intent i3 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i3.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
i3.putExtra(RecognizerIntent.EXTRA_PROMPT, "Is the status Confirmed or Unconfirmed?");
startActivityForResult(i3, checklv2);

Intent i4 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i4.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
i4.putExtra(RecognizerIntent.EXTRA_PROMPT, "What is the temp?");
startActivityForResult(i4, checklv3);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == check && resultCode == RESULT_OK){
    ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
    lv4.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));}
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == checklv1 && resultCode == RESULT_OK){
    ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
    lv1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));}
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == checklv2 && resultCode == RESULT_OK){
    ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
    lv2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));}
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == checklv3 && resultCode == RESULT_OK){
    ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
    lv3.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));}
super.onActivityResult(requestCode, resultCode, data);

}

(ОБНОВЛЕНО) Если я пользуюсь Таймером, у меня есть следующий код, но где я ошибся и где мне разместить super.onActivityResult...?

        if (requestCode == check && resultCode == RESULT_OK){
        ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        lv4.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));
            new CountDownTimer(3000, 1000) {

                public void onTick(long millisUntilFinished) {
                    // Do nothing for your logic.
                }
                public void onFinish() {
                    // Your logic here.

                }
            }.start();}}
Автор: N MC Источник Размещён: 14.07.2016 04:53

Ответы (2)


2 плюса

2492 Репутация автора

Вместо обработчика вы можете использовать Countdowntimer.

new CountDownTimer(3000, 1000) {

  public void onTick(long millisUntilFinished) {
     // Do nothing for your logic.
  }
  public void onFinish() {
    // Your logic here.
  }
}.start();
Автор: Andy Developer Размещён: 14.07.2016 05:25

0 плюса

35 Репутация автора

Попробуйте использовать метод setClickable https://developer.android.com/reference/android/view/View.html#setClickable(boolean)

public void onClick(final View v){
    v.setClickable(false);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent i1 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            i1.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            i1.putExtra(RecognizerIntent.EXTRA_PROMPT, "Is the information correct? (Yes/No)");
            v.setClickable(true);
            startActivityForResult(i1, check);
        }
    }, 3000);
Автор: Luís Ledebour Размещён: 15.07.2016 07:42
Вопросы из категории :
32x32