Тост сообщение исчезает раньше, чем должно - PullRequest
0 голосов
/ 19 декабря 2018

Почему всплывающее сообщение, показанное в в этом GIF , исчезает раньше, чем должно?Я попытался отобразить всплывающее сообщение от первого действия (действия по сбросу пароля) прямо перед началом нового действия (действия по входу в систему).Я также попытался показать всплывающее сообщение с новым действием в onResume (), и оно имеет тот же эффект.Кроме того, как видно в GIF, всплывающее сообщение будет появляться до тех пор, пока оно не закончится, если я нажму на то, где оно должно быть.РЕДАКТИРОВАТЬ: На самом деле, сообщение тост появится снова, если я коснусь в любом месте экрана.

РЕДАКТИРОВАТЬ: Вот код для сообщения тост:

auth.sendPasswordResetEmail(email)
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(ResetPasswordActivity.this, "We have sent you instructions to reset your password!", Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(ResetPasswordActivity.this, LoginActivity.class));
                                finish();
                            } else {
                                Toast.makeText(ResetPasswordActivity.this, "Failed to send reset email!", Toast.LENGTH_SHORT).show();
                            }

                            progressBar.setVisibility(View.GONE);
                        }
                    });

Я получаю ту же проблему, когда яиспользуйте Toast.LENGTH_LONG.Он исчезает за то же время, что и Toast.LENGTH_SHORT, но длится дольше (как и ожидалось) после того, как я снова нажму на него, чтобы восстановить его, как в GIF.Дело в том, что мне не нужно нажимать, чтобы показывать его в течение всего времени.

Ответы [ 5 ]

0 голосов
/ 20 декабря 2018

Вы можете попробовать запустить RestartPasswordActivity для результата:

Intent intent = new Intent(this, Activity.class);
startActivityForResult(intent);

Уничтожить это действие следующим образом:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent); 
finish();

И получить это значение в LoginActivity следующим образом:

@Override protected void onActivityResult(int requestCode, 
int resultCode, Intent data) {
    if (requestCode == 1) { 
        if(resultCode == Activity.RESULT_OK){
            boolean result = data.getBooleanExtra("result"); 
            if(result)
                Toast.makeText(this, "Text", Toast.LENGTH_LONG).show();
        }
    }
}
0 голосов
/ 20 декабря 2018

Попробуйте поставить код Toast после финиша (), например:

auth.sendPasswordResetEmail(email)
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                startActivity(new Intent(ResetPasswordActivity.this, LoginActivity.class));
                                finish();
                                Toast.makeText(ResetPasswordActivity.this, "We have sent you instructions to reset your password!", Toast.LENGTH_SHORT).show();
                            } else {
                                Toast.makeText(ResetPasswordActivity.this, "Failed to send reset email!", Toast.LENGTH_SHORT).show();
                            }

                            progressBar.setVisibility(View.GONE);
                        }
                    });
0 голосов
/ 19 декабря 2018

Вы можете использовать обработчик для задержки вашей функции

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            //do something 
        }
    }, 3000 ); //time in milisecond

, отредактированный как ваш код

 auth.sendPasswordResetEmail(email)
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(ResetPasswordActivity.this, "We have sent you instructions to reset your password!", Toast.LENGTH_LONG).show();
                                new Handler().postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        startActivity(new Intent(ResetPasswordActivity.this, LoginActivity.class));
                                        finish();
                                    }
                                }, 3000 ); 

                            } else {
                                Toast.makeText(ResetPasswordActivity.this, "Failed to send reset email!", Toast.LENGTH_SHORT).show();
                            }

                            progressBar.setVisibility(View.GONE);
                        }
                    });
0 голосов
/ 19 декабря 2018

Просто поставьте Toast.makeText(this, "Hello World", Toast.LENGTH_LONG).show();

А если не получится, удалите приложение с устройства и установите его

0 голосов
/ 19 декабря 2018

Вы можете легко изменить длину тоста, изменив третий аргумент:

Toast.makeText(this, "Hello World", Toast.LENGTH_LONG).show();

Или

int duration;
Toast.makeText(this, "Hello World", duration).show();
...