Android 如何使Progressdialog中的微调器旋转?
我已经实现了progressDialog,但当我的活动开始时,当它工作或从internet获取信息时,它不会旋转。我在Stackoverflow和其他地方尝试了许多解决方案,但它仍然没有旋转-progressDialog弹出正常,但轮子没有旋转。许多建议都同意使用AsyncTask,启动一个新的线程/runnable,而不是UI线程,但仍然没有成功。如果有任何解决办法,我将不胜感激 在Stackoverflow上帖子的帮助下,我在AsyncTask的OnPreExecute中尝试了这一点……但现在progressDialog甚至没有显示出来!:Android 如何使Progressdialog中的微调器旋转?,android,progressdialog,Android,Progressdialog,我已经实现了progressDialog,但当我的活动开始时,当它工作或从internet获取信息时,它不会旋转。我在Stackoverflow和其他地方尝试了许多解决方案,但它仍然没有旋转-progressDialog弹出正常,但轮子没有旋转。许多建议都同意使用AsyncTask,启动一个新的线程/runnable,而不是UI线程,但仍然没有成功。如果有任何解决办法,我将不胜感激 在Stackoverflow上帖子的帮助下,我在AsyncTask的OnPreExecute中尝试了这一点……但现
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;
}
}
}
我不记得曾经进入styles.xml并设置这些值。除了spinner之外,我的应用程序运行良好,但是=主题。。。styles.xml的部分都是红色的,当我将鼠标放在它们上面时,我会看到这样的消息:
Cannot resolve symbol 'Theme.AppCompat'
Cannot resolve symbol 'Theme.AppCompat.Light'
Cannot resolve symbol 'Theme.AppCompat.Light.DarkActionBar'
这可能与我的问题有关吗?您不需要在新线程中将内容包装在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();
}
}
在做了这些改变之后,它对我来说很好。需要检查的一件事是,您没有在设备的“开发人员选项”中关闭动画。如果它们被关闭,就像在浓缩咖啡测试中需要关闭一样,那么微调器将不会显示。您以前显示进度对话框的方法是正确的。我认为进度对话框没有旋转,因为StringRequest在主UI线程上完成了一些繁重的工作,我无法理解StringRequest的作用是什么?请分享该活动的主题DownVoter:请评论原因。思考这个问题并尝试解决,但不知道如何解决,这就是我发布的原因。目前远离机器,稍后将发布主题,谢谢。字符串请求所做的只是从服务器获取一些小文本。@NileshRathod在my中添加了有关主题的信息question@CHarris你的原色和原色在哪里?我想我的问题与主题有关,还在研究中。不过对开发者的选择很感兴趣。
// 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();
}
}