Сообщение Toast не будет отображаться, если оно помещено в начале попытки - PullRequest
0 голосов
/ 29 января 2020

У меня проблема с отображением тостового сообщения. Я хочу, чтобы он отображался при первом нажатии кнопки, чтобы пользователь знал, что приложение работает (в моем случае, генерируется QR-код). Если я помещаю тост в начале улова, он не отображается сразу после нажатия кнопки. Тост отображается только после генерации и отображения QR-кода. Кроме того, тост отображается (после отображения QR-кода) на моем эмуляторе Android, но не отображается на моем физическом устройстве android (я разрешил разрешения для приложений), если я размещаю его в начале попытки try. Он будет отображаться только на моем физическом устройстве, если тост находится в конце попытки перехвата. Это меня озадачило. Я попытался использовать ProgressBar, который будет запускаться при нажатии кнопки и завершаться после отображения QR-кода, но это оказалось трудным для реализации. Я думал, что тост будет легкой альтернативой, поскольку я использовал их в своем проекте без каких-либо проблем до сих пор. Если кто-нибудь может помочь мне понять, как можно заставить тост отображаться сразу после нажатия кнопки, а не после того, как QR-код будет сгенерирован и отображен, это было бы очень полезно. В качестве альтернативы, если кто-то может помочь мне с включением индикатора выполнения (круга) для запуска после нажатия кнопки и остановки после отображения QR-кода, это также будет очень цениться, так как я считаю, что это было бы наиболее идеальным решением.

Пожалуйста, смотрите код ниже:

publi c класс Generate extends AppCompatActivity {

public final static int QRcodeWidth = 500 ;
private static final String IMAGE_DIRECTORY = "/QR_Code_Generated";
Bitmap bitmap;
private EditText etQr;
private ImageView ivGenerated;
private Button btn;
private Button clrBtn;
private Button shareBtn;
private ProgressBar progressBar;
private int progressStatus = 0;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_generate);

    ivGenerated = (ImageView) findViewById(R.id.iv_generated);
    etQr = (EditText) findViewById(R.id.generate_input);
    btn = (Button) findViewById(R.id.button);
    clrBtn = (Button) findViewById(R.id.clearButton);
    shareBtn = (Button) findViewById(R.id.shareButton);



    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (etQr.getText().toString().trim().length() == 0) {

            } else {

                try {
                    Toast toast1 = Toast.makeText(Generate.this, "Please Wait, Your QR Code is Generating & will be Saved to your Device... ", Toast.LENGTH_SHORT);
                    toast1.show();

                    bitmap = TextToImageEncode(etQr.getText().toString());
                    ivGenerated.setImageBitmap(bitmap);
                    String path = saveImage(bitmap);  //give read write permission

                    // Toast.makeText(Generate.this, "QR Code saved to -> " + path, Toast.LENGTH_SHORT).show(); (if I include this second toast it does not display the first toast1)


                } catch (WriterException e) {
                    e.printStackTrace();
                }


            }
        }
    });

1 Ответ

0 голосов
/ 30 января 2020

Я не нахожу проблем с вашим кодом для всплывающего тоста, вы можете попробовать добавить задержку в 250 мс после toast.show (), возможно, так. было бы обходным путем для вас.

А для индикатора выполнения это очень просто. Создайте индикатор выполнения в своем файле .xlm и поместите его в центр своего View. Расположите его, чтобы показать его и сделать его видимым как ЛОЖЬ. Вы можете попробовать это,

progressbar = = (ProgressBar) findViewById(R.id.progressbar);
btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        progressbar.setVisibility(VISIBLE); // or try View.VISIBLE
        if (etQr.getText().toString().trim().length() == 0) {

        } else {

            try {
                Toast toast1 = Toast.makeText(Generate.this, "Please Wait, Your QR Code is Generating & will be Saved to your Device... ", Toast.LENGTH_SHORT);
                toast1.show();

                bitmap = TextToImageEncode(etQr.getText().toString());
                ivGenerated.setImageBitmap(bitmap);
                String path = saveImage(bitmap);  //give read write permission

                // Toast.makeText(Generate.this, "QR Code saved to -> " + path, Toast.LENGTH_SHORT).show(); (if I include this second toast it does not display the first toast1)


            } catch (WriterException e) {
                e.printStackTrace();
            }
            finally {
                progressbar.setVisibility(INVISIBLE); // or try View.INVISIBLE
            }
        }
    }
});
...