2017-10-28 49 views
0

我已經實現了progressDialog,但是當我的活動開始並且它工作或從互聯網獲取信息時,它不會旋轉。我已經在Stackoverflow和其他地方嘗試了很多解決方案,但它仍然不旋轉 - progressDialog彈出ok,但輪子不旋轉。許多建議都一致使用AsyncTask,開始一個新的線程/ runnable而不是UI線程,但仍然沒有運氣。我會很感激任何解決方案。我如何在Progressdialog旋轉中製作微調框?

與#2職位的幫助,我想這在我的AsyncTaskOnPreExecute ......但現在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和設置這些值。我的應用程序工作正常(除了微調),但=Theme...部分styles.xml的都是紅色的,當我把鼠標放在他們,我得到的消息:

Cannot resolve symbol 'Theme.AppCompat' 
Cannot resolve symbol 'Theme.AppCompat.Light' 
Cannot resolve symbol 'Theme.AppCompat.Light.DarkActionBar' 

難道這是與我的問題呢?

+0

您之前顯示進度對話框的方法是正確的。我認爲進度對話框沒有旋轉,因爲主UI線程上的StringRequest完成了一些繁重的工作,而且我無法理解這個StringRequest做了什麼? – Passiondroid

+0

分享你的主題爲該活動 –

+0

Downvoter:請評論原因。想到這個問題,並嘗試解決,不知道如何,這就是爲什麼我張貼。此刻離開機器,馬上發佈主題,謝謝。所有字符串請求都會從服務器獲取一些小文本。 – CHarris

回答

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(); 
    } 
} 

做出這些更改後,它對我來說工作正常。需要檢查的一點是,您沒有在設備上的「開發人員選項」中關閉動畫。如果他們被關閉(就像他們需要進行濃縮咖啡測試),那麼微調不會顯示。

+0

我認爲我的問題與主題有關,仍然在處理它。雖然對開發者選項感興趣。 – CHarris