2011-11-24 2 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를 호출하는 대신이 작업을 수행하는 것이 좋습니다. 어떤 경우에는 Onresume에서 홈 키를 누르고 다시 시도하기 때문에

+0

비동기 작업을 다시 실행하고 싶지 않습니다. 나는 그것이 활동으로 돌아 왔을 때 실행 중인지, 그리고 진행률 막대가 멈출 때까지 그리고 그 후에 목록보기를 새로 고칠 때까지 실행 중인지 여부를 알고 싶습니다. –

+0

하지만 진행률 표시 줄에서 대화 상자를 표시하는 경우 UI 사용자는 thunt 화면에서 앞으로 진행할 수 없으므로 대화 상자가 완료됩니다. 당신은 asyntask의 preExecute 메소드에서 시작해야하고 asyntask의 postUpdate 메소드에서 대화 상자를 닫아야합니다. –

+0

진행 막대가 UI를 막지 못합니다. 그냥 액션 바에 삽입되어 회전하고 있습니다. 내가 달성하고 싶은 것은 작업이 여전히 실행 중일 때 계속 회전시키는 것입니다. –

관련 문제