在我的MainActivity的xml文件中,我定义了一个循环ProgressBar,我想在我的应用程序进行一些加载时显示它。
private void refresh() {
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
//show progress bar and blur background
progressBar.setVisibility(View.VISIBLE);
mainActivityScreen.setAlpha(0.5f);
}
@Override
protected Void doInBackground(Void... params) {
/*do something */
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPreExecute();
//hide progress bar and unblur background
progressBar.setVisibility(View.GONE);
mainActivityScreen.setAlpha(1.0f);
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
当我在Nexus 6P上运行此代码时,它完全应该如此。我单击刷新按钮,出现progressBar(最初看不见),应用程序执行一些网络操作,当它完成后,progressBar再次消失。现在,当我在旧手机上运行相同的代码时,progressBar不会显示。起初我想也许电话无法加载progressBar,但这不是问题,因为当我忽略了这条线
progressBar.setVisibility(View.GONE);
它显示出来(但显然不会再次消失)。这也不是一个问题,因为网络操作需要大约2秒才能完成。
有人可以告诉我为什么这只适用于我的新手机,而不是较旧的手机?我为此疯狂。
提前感谢任何帮助。
编辑:xml:
<ProgressBar
android:id="@+id/progressBar"
style="@android:style/Widget.DeviceDefault.ProgressBar"
android:indeterminateTint="@color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:indeterminate="true"
android:visibility="gone"/>
答案 0 :(得分:1)
我看到了你的错误;
ii=1
label="α β $ii"
convert in.png -fill black -annotate "$label" out.png
在你的onPostExecute完成后,你再次调用super.onPreExecute()。
删除该行:
protected void onPostExecute(Void aVoid) {
super.onPreExecute();
//hide progress bar and unblur background
progressBar.setVisibility(View.GONE);
mainActivityScreen.setAlpha(1.0f);
}
答案 1 :(得分:0)
我通过使用Handler而不是AsyncTask解决了这个问题。不知何故,这适用于所有手机。无论如何,谢谢你的帮助!