我在显示吐司消息时遇到问题。 我希望它在最初单击按钮时显示,以便用户知道应用程序正在运行(在我的情况下,生成 QR 码(。 如果我将吐司放在尝试捕获的开头,则单击按钮时它不会立即显示。它仅在生成并显示 QR 码后显示 Toast。 此外,如果我将 toast 放在 try catch 的开头,则在我的 Android 模拟器上显示(显示 QR 码后(,但在我的物理 android 设备上根本不显示(我已允许应用程序权限(。仅当 toast 位于 try catch 结束时时,它才会显示在我的物理设备上。 这让我感到困惑。 我尝试使用一个进度条,它会在按钮单击时运行并在显示二维码后终止,但发现这很难实现。 我认为吐司将是一个简单的选择,因为到目前为止,我已经在整个项目中使用了它们,没有任何问题。 如果有人能帮助我了解如何在单击按钮时立即显示 Toast,而不是在生成和显示 QR 码后显示,将不胜感激。 或者,如果有人可以帮助我包括一个进度条(圆圈(,在单击按钮后运行并在显示二维码后停止,这也将不胜感激,因为我相信这将是最理想的解决方案。
请参阅下面的代码:
public class Generate extensions 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();
}
}
}
});
我没有发现您的 toast 弹出代码有任何问题,您可以尝试在 toast.show(( 之后添加 250 毫秒的延迟,也许它. 将是一个变通办法。
对于进度条,它非常简单。在 .xlm 文件中创建一个进度条,并将其放在 View.Layout 的中心,您愿意显示它并使其可见性为 FALSE。 你可以试试这个,
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
}
}
}
});