Java Android Progressbar在错误的时间启动
我尝试在我的应用程序中启动progressbar,但在启动该功能之前,它不会显示Java Android Progressbar在错误的时间启动,java,android,function,progress-bar,Java,Android,Function,Progress Bar,我尝试在我的应用程序中启动progressbar,但在启动该功能之前,它不会显示 public void onClick(View v) { if (v == button) { ProgressDialog dialog = ProgressDialog.show(App.this, "", "Loading. Please wait...", true); dialog.show(); try { directory = edittext
public void onClick(View v) {
if (v == button)
{
ProgressDialog dialog = ProgressDialog.show(App.this, "",
"Loading. Please wait...", true);
dialog.show();
try
{
directory = edittext.getText().toString();
FileWriter fstream = new FileWriter("/data/data/folder.hide.alexander.fuchs/folder.db");
BufferedWriter out = new BufferedWriter(fstream);
out.write(directory);
//Close the output stream
out.close();
if(hide_or_show == "hide")
{
edittext.setVisibility(View.INVISIBLE);
folder_to_hide.setVisibility(View.INVISIBLE);
hide();
dialog.dismiss();
}
else
{
show();
edittext.setVisibility(View.VISIBLE);
folder_to_hide.setVisibility(View.VISIBLE);
dialog.dismiss();
}
}
catch(Exception x)
{
String ErrorMessage = x.getMessage();
Toast.makeText(this,"Error"+ErrorMessage, Toast.LENGTH_LONG).show();
finish();
}
}
if (v == options)
{
final CharSequence[] items = {"Change password", "http://www.alexander-fuchs.net/", "Market"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Options");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (items[item] == "Change password")
{
createpass();
}
if (items[item] == "http://www.alexander-fuchs.net/")
{
intentstarter(items[item].toString());
toaster(items[item].toString());
}
if (items[item] == "Market")
{
intentstarter("market://search?q=pub:Alexander Fuchs");
toaster("Please wait...");
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
当我点击按钮时,需要很长时间才能响应,然后整个函数在不提示progressbar的情况下完成。onClick是一个回调,只有在回调结束时才会返回到Android。 您所做的所有UI交互基本上都是在回调处于活动状态时收集和排队的,并在返回后执行(从技术上讲可能并不完全准确) 为了让ProgressBar在操作开始时显示,并在操作结束时消失,可以实现一个
AsyncTask
,其中进度条显示在onPreExecute
中,实际计算在doInBackground
中完成,ProgressBar在onPostExecute
中取消。例如:
protected void onPreExecute() {
dialog = new ProgressDialog(context);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.show();
}
protected void onPostExecute(Map<Integer, String> integerStringMap) {
if (dialog!=null)
dialog.cancel();
}
protected void onProgressUpdate(Integer... values) {
int val = values[0]*10000/num;
dialog.setProgress(val);
}
受保护的void onPreExecute(){
dialog=新建进度对话框(上下文);
设置ProgressStyle(ProgressDialog.STYLE_水平);
dialog.show();
}
受保护的void onPostExecute(映射整型字符串映射){
如果(对话框!=null)
dialog.cancel();
}
受保护的void onProgressUpdate(整型…值){
int val=值[0]*10000/个;
对话框.setProgress(val);
}
关于更完整的示例。当我实现它时,活动崩溃