2011-11-24 28 views
0

我正在使用異步任務重新加載我的listview中的數據,並在我的活動中設置進度條以顯示它正在加載。但問題是,如果我開始一個新的活動並返回並且未完成加載,則不會顯示進度欄。我怎樣才能設置進度條繼續加載?我忘了提及,在我回到活動後,異步任務不會刷新我的列表視圖。下面是我使用的代碼:Android異步任務進度條在返回到活動後不加載

public class MyCollectionsTask extends AsyncTask <Context, Integer, Void> { 
    @Override 
    protected Void doInBackground(Context... arrContext) { 
     JsonCollection jsonColl = new JsonCollection(); 
     Log.e("","DO IN BACKGROUND"); 
     for(int i=0; i<arrContext.length; i++) { 
       jsonColl.executeInsert(arrContext[i]); 
     } 
     return null; 
    } 
    @Override 
    protected void onProgressUpdate(Integer... progress) { 
     Log.e("","ON PROGRESS UPDATE"); 
     for (int i=0; i<progress.length; i++){ 
      progressBar.setProgress(i); 
     } 
    } 
    @Override 
    protected void onCancelled() { 
     Log.e("","ON CANCELLED"); 
     progressBar.setVisibility(View.GONE); 
     sync.setImageResource(R.drawable.sync_icon2); 
    } 
    @Override 
    protected void onPreExecute() 
    { 
     Log.e("","ON PRE EXECUTE"); 
    } 
    @Override 
    protected void onPostExecute(Void v) { 
     Log.e("","ON POST EXECUTE"); 
     SystemDatabaseHelper newdbHelper = new SystemDatabaseHelper(MyCollectionList.this, null, 1); 
     newdbHelper.initialize(MyCollectionList.this); 

     String genresSQLforID = "SELECT DISTINCT g.genre_id AS genreID, gl.title AS Title " + 
       "FROM genres AS g, genre_lang AS gl " + 
       "WHERE gl.genre_id = g.genre_id AND gl.lang_code ='" + langCode + "'"+" ORDER BY gl.title"; 
     Cursor genresCursor = newdbHelper.executeSQLQuery(genresSQLforID); 
     if (genresCursor.getCount() == 0) { 
      genresCursor.close();   
     } else { 
      genresCursor.moveToFirst(); 
      GenID = Integer.parseInt(genresCursor.getString(genresCursor.getColumnIndex("genreID"))); 
     } 
      getCollectionsForGenre(GenID); 
     final SharedPreferences isLogged = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     SharedPreferences.Editor editor = isLogged.edit(); 
     editor.putBoolean("getProgBarCollection", false); 
     editor.commit(); 
     progressBar.setVisibility(View.GONE); 
     sync.setImageResource(R.drawable.sync_icon2); 
    } 
    } 
+0

您正在使用哪種方法執行此任務? 'onCreate()'或什麼? –

+0

我在onCreate()中運行這個; –

+0

運行在onResume() – njzk2

回答

1

當您返回從另一個活動回來,它只是恢復活動它不進去的onCreate()方法。您需要做的就是使用startActivityForResult()從asyntask活動開始另一項活動,並在您的asyntask活動中重寫onActivityResult方法。 和onActivityResult()再次執行asyntask。更好的做法是代替Onresume中的asyntask進行調用,因爲在其他情況下,它會像On homeume那樣進入Onresume,然後再次運行

+0

我不想再次運行異步任務。我只想知道當我回到活動時它是否仍在運行,並且它正在運行以顯示進度欄,直到它停止並在此之後刷新列表視圖。 –

+0

但是,如果您從進度條顯示對話框,則它將保持UI用戶將無法從屏幕直到完成對話框前進。你應該在asyntask的preExecute方法中啓動對話框,在asyntask的postUpdate方法中,你應該關閉對話框 –

+0

進度條沒有阻塞UI,它只是嵌入在操作欄並在那裏旋轉。我想要實現的目標是在任務仍在運行時繼續旋轉它。 –