我已经实现了progressDialog
,但是当我的活动开始时以及它确实起作用或从互联网上获取信息时它不会旋转。我已经在Stackoverflow和其他地方尝试了很多解决方案,但它仍然没有旋转 - progressDialog
弹出正常但轮子没有旋转。许多建议都同意使用AsyncTask
,开始一个新的线程/ runnable而不是UI线程,但仍然没有运气。我很感激任何解决方案。
借助Stackoverflow上的帖子,我在我的OnPreExecute
的{{1}}中尝试了这个...但现在AsyncTask
甚至没有出现!:
progressDialog
我一直在使用的代码显示 protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(NewContact.this);
new Thread(new Runnable() {
@Override
public void run() {
// Showing progress dialog
pDialog.setMessage("Loading...");
pDialog.show();
}
});
}
,但它没有旋转,是:
progressDialog
以下是活动的完整代码结构:
protected void onPreExecute() {
pDialog = new ProgressDialog(NewContact.this);
// Showing progress dialog before making http request
pDialog.setMessage("Loading...");
pDialog.show();
super.onPreExecute();
}
在public class NewContact extends AppCompatActivity implements android.widget.CompoundButton.OnCheckedChangeListener {
private ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_contact);
StringRequest stringRequest = new StringRequest(Request.Method.POST, NewContact_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
return params;
}
};
}
// Load data in background
class LoadContact extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(NewContact.this);
new Thread(new Runnable() {
@Override
public void run() {
// Showing progress dialog
pDialog.setMessage("Loading...");
pDialog.show();
}
});
}
@Override
protected Void doInBackground(Void... voids) {
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
hidePDialog();
}
}
@Override
protected void onResume() {
super.onResume();
LoadContact loadContact = new LoadContact();
loadContact.execute();
}
public void hidePDialog() {
if (pDialog != null) {
pDialog.dismiss();
pDialog = null;
}
}
}
我有:
res/values/styles.xml
我不记得曾经进入<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
并设置这些值。我的应用程序工作正常(除了微调),但styles.xml
的{{1}}部分都是红色的,当我把鼠标放在它们上面时,我收到消息:
=Theme...
这可能与我的问题有关吗?
答案 0 :(得分:1)
你不需要将onPreExecute
中的内容包装在一个新主题中,你没有做任何阻碍那里UI的事情。在返回null之前,您似乎还有一个额外的右括号。我改变它看起来像这样:
// Load data in background
class LoadContact extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
// Showing progress dialog
pDialog.setMessage("Loading...");
pDialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
hidePDialog();
}
}
进行这些更改后,它对我来说很好。要检查的一件事是,您没有在设备的“开发者选项”中关闭动画。如果它们被关闭(就像它们需要用于Espresso测试一样),那么微调器就不会显示出来。