如何在我的Progressdialog旋转中制作微调器?

时间:2017-10-28 11:02:25

标签: android progressdialog

我已经实现了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...

这可能与我的问题有关吗?

1 个答案:

答案 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测试一样),那么微调器就不会显示出来。