Индикатор асинхронной задачи Android не загружается после возврата к активности - PullRequest
0 голосов
/ 24 ноября 2011

Я использую Async Task для перезагрузки данных в моем списке и настраиваю индикатор выполнения в своей активности, чтобы показать, что он загружается.Но проблема в том, что если я начну новое действие и вернусь обратно, а загрузка не будет завершена, индикатор выполнения не будет отображаться.Как настроить индикатор выполнения для продолжения загрузки?И я забыл упомянуть, что после того, как я вернусь к занятию, асинхронная задача тоже не обновляет мой список.Вот код, который я использую:

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

1 Ответ

1 голос
/ 24 ноября 2011

когда вы возвращаетесь из другого действия, оно просто возобновляет действие, оно не входит в метод onCreate (). все, что вам нужно сделать, это запустить другое действие из вашего действия asyntask, используя startActivityForResult () , и переопределить метод onActivityResult в своем действии asyntask. и в onActivityResult () снова выполните асинхронную задачу. Лучше делать это вместо того, чтобы звонить из asyntask в Onresume, потому что в некоторых других случаях он также переходит в Onresume, например, нажимая клавишу home и повторяя вызов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...