Android ProgressDialog "Spinner" 消失(不显示)
Android ProgressDialog "Spinner" disappear(doesn't show up)
我正在开发一个 android 应用程序,我需要从互联网上获取数据。
我在 Homepage.java 中声明了一个 "private Progress dialog"。
在 onCreate() 方法中,调用函数
dialog = ProgressDialog.show(Homepage.this, "Connecting", "Please wait for a while...", true);
并创建另一个线程来获取数据,并在 finally 块中调用
"dialog.dismiss()"
完整的onResume()代码如下所示。
@Override
protected void onResume(){
super.onResume();
Log.e(TAG, "onResume");
dialog = ProgressDialog.show(Homepage.this, "Connecting", "Please wait for a while..", true);
/******Start fetching data.******/
Thread getDataThread = new Thread() {
@Override
public void run() {
try {
try {
getData();
} catch (JSONException e) {
alert_error();
e.printStackTrace();
} catch (IOException e) {
alert_error();
e.printStackTrace();
} finally {
dialog.dismiss();
}
} catch (SQLException e) {
alert_error();
e.printStackTrace();
} catch (ExecutionException e) {
alert_error();
e.printStackTrace();
} catch (InterruptedException e) {
alert_error();
e.printStackTrace();
}finally{
dialog.dismiss();
}
}
};
getDataThread.start();
}
起初,这很管用。(微调器显示)
但在某些时候(我不记得什么时候),对话框仍然有效,但微调器消失了
如下图(红线处应该是spinner显示的地方)
Spinner is gone
对话框仍然有效,但是从这个应用程序的任何地方调用的所有 ProgressDialog,微调器都消失了。(甚至不显示)
如果我将从互联网获取数据部分更改为休眠 10 秒
如下所示
@Override
protected void onResume(){
super.onResume();
Log.e(TAG, "onResume");
dialog = ProgressDialog.show(Homepage.this, "Connecting", "Please wait for a while...", true);
/******Start fetching data.******/
Thread getDataThread = new Thread() {
@Override
public void run() {
try {
sleep(10*1000);
} catch (InterruptedException e) {
e.printStackTrace();
dialog.dismiss;
}
}
};
getDataThread.start();
}
微调器仍然没有出现。
我认为这可能与我的项目中的全局设置或值有关,我创建了一个空 activity 除了 super.onCreate 和 setContentView 之外只有一种方法
我打了电话
"ProgressDialog dialog = ProgressDialog.show(Homepage.this, "123", "456", 真);"
微调器仍然没有出现!
但如果我创建一个新项目并添加相同的代码,它就可以工作!
提前致谢!
我认为问题出在你的phone设置上,我遇到过一次同样的问题,你需要做的是:
转到 phone 设置中的开发者选项。
打开过渡(在我的例子中,我将它们关闭以使 phone 快速动作)
重新启动应用程序,希望微调器会在那里。
更新:
或者您可以为此目的尝试像 Material Dialogs 这样的库,它是我的最爱之一,您需要做的就是
编译
compile 'com.afollestad.material-dialogs:core:0.8.6.0'
然后是要显示对话框的位置
new MaterialDialog.Builder(this)
.title(R.string.progress_dialog)
.content(R.string.please_wait)
.progress(true, 0)
.show();
您可以找到更多信息 here 以进一步自定义它和使用细节。
希望对您有所帮助
我正在开发一个 android 应用程序,我需要从互联网上获取数据。 我在 Homepage.java 中声明了一个 "private Progress dialog"。 在 onCreate() 方法中,调用函数
dialog = ProgressDialog.show(Homepage.this, "Connecting", "Please wait for a while...", true);
并创建另一个线程来获取数据,并在 finally 块中调用
"dialog.dismiss()"
完整的onResume()代码如下所示。
@Override
protected void onResume(){
super.onResume();
Log.e(TAG, "onResume");
dialog = ProgressDialog.show(Homepage.this, "Connecting", "Please wait for a while..", true);
/******Start fetching data.******/
Thread getDataThread = new Thread() {
@Override
public void run() {
try {
try {
getData();
} catch (JSONException e) {
alert_error();
e.printStackTrace();
} catch (IOException e) {
alert_error();
e.printStackTrace();
} finally {
dialog.dismiss();
}
} catch (SQLException e) {
alert_error();
e.printStackTrace();
} catch (ExecutionException e) {
alert_error();
e.printStackTrace();
} catch (InterruptedException e) {
alert_error();
e.printStackTrace();
}finally{
dialog.dismiss();
}
}
};
getDataThread.start();
}
起初,这很管用。(微调器显示) 但在某些时候(我不记得什么时候),对话框仍然有效,但微调器消失了 如下图(红线处应该是spinner显示的地方) Spinner is gone
对话框仍然有效,但是从这个应用程序的任何地方调用的所有 ProgressDialog,微调器都消失了。(甚至不显示)
如果我将从互联网获取数据部分更改为休眠 10 秒 如下所示
@Override
protected void onResume(){
super.onResume();
Log.e(TAG, "onResume");
dialog = ProgressDialog.show(Homepage.this, "Connecting", "Please wait for a while...", true);
/******Start fetching data.******/
Thread getDataThread = new Thread() {
@Override
public void run() {
try {
sleep(10*1000);
} catch (InterruptedException e) {
e.printStackTrace();
dialog.dismiss;
}
}
};
getDataThread.start();
}
微调器仍然没有出现。
我认为这可能与我的项目中的全局设置或值有关,我创建了一个空 activity 除了 super.onCreate 和 setContentView 之外只有一种方法 我打了电话 "ProgressDialog dialog = ProgressDialog.show(Homepage.this, "123", "456", 真);"
微调器仍然没有出现!
但如果我创建一个新项目并添加相同的代码,它就可以工作!
提前致谢!
我认为问题出在你的phone设置上,我遇到过一次同样的问题,你需要做的是:
转到 phone 设置中的开发者选项。
打开过渡(在我的例子中,我将它们关闭以使 phone 快速动作)
重新启动应用程序,希望微调器会在那里。
更新:
或者您可以为此目的尝试像 Material Dialogs 这样的库,它是我的最爱之一,您需要做的就是
编译
compile 'com.afollestad.material-dialogs:core:0.8.6.0'
然后是要显示对话框的位置
new MaterialDialog.Builder(this)
.title(R.string.progress_dialog)
.content(R.string.please_wait)
.progress(true, 0)
.show();
您可以找到更多信息 here 以进一步自定义它和使用细节。
希望对您有所帮助