2013-07-17 3 views
0

У меня есть действие, которое содержит кнопку, когда вы нажимаете кнопку, она загружает второе действие. Второе действие имеет listView и множество других вещей, и на большинстве устройств требуется несколько секунд для загрузки, поэтому я хочу отобразить progressDialog, чтобы пользователь знал, что активность фактически загружается. У меня есть следующие:Загрузка активности перед запуском

EDIT:

public void rewardFirstNext(View view){ 

    AsyncTask<Void, Void, Void> progress = new AsyncTask<Void, Void, Void>() { 
     private ProgressDialog progressDialog; 

     protected void onPreExecute(){ 
      progressDialog = new ProgressDialog(getApplicationContext()); 
      progressDialog.setTitle("Loading Installed Applications"); 
      progressDialog.setMessage("Please wait."); 
      progressDialog.setCancelable(false); 
      progressDialog.setIndeterminate(true); 
      progressDialog.show(); 
     } 

     protected Void doInBackground(Void... voids) { 
      PackageManager mPackageManager = getPackageManager(); 
      List<Applications> packageInfoListApps = new ArrayList<Applications>(); 
      List<PackageInfo> packageInfoList = mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS); 
      List<PackageInfo> installedApps = new ArrayList<PackageInfo>(); 

      for (PackageInfo apps : packageInfoList) { 
       if (!isSystemPackage(apps)) { 
        installedApps.add(apps); 
       } 

      } 
      Collections.sort(installedApps, new Comparator<PackageInfo>() { 
       public int compare(PackageInfo o1, PackageInfo o2) { 
        return o1.applicationInfo.loadLabel(getPackageManager()).toString().compareToIgnoreCase(o2.applicationInfo.loadLabel(getPackageManager()).toString()); 
       } 
      }); 
      for (PackageInfo apps : installedApps) { 
       packageInfoListApps.add(new Applications(apps, false, false)); 
      } 

      //what else happens here? 
      return null; 
     } 

     protected void onPostExecute(Void result){ 
      progressDialog.dismiss(); 
     } 
    }; 

    progress.execute((Void[]) null); 
} 
+0

Проблема в том, что вы делаете, не дает вам хотеть, чтобы вы этого хотели. то есть. он не загружает содержимое в список. все, что вы делаете, - это запуск активности из фонового потока и ничего более. Вам нужно опубликовать то, что вы загружаете в список, и как вы это делаете. – tyczj

+0

Возможно, я ошибаюсь, так как я не делал Android некоторое время, но когда вы запускаете активность в doInBackground(), будет onPostExecute() запускать только после того, как вы закончите новую деятельность? (DoInBackground будет продолжаться до завершения новой активности) –

+2

@StuWhyte все это неправильно, он не должен использовать асинтез для запуска активности. но нет, он не будет запущен, потому что вызывающая активность будет уничтожена, тогда он начнет новую активность. – tyczj

ответ

1

То, что вы должны делать это положить все это

mPackageManager = getPackageManager(); 
List<Applications> packageInfoListApps = new ArrayList<Applications>(); 
List<PackageInfo> packageInfoList = mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS); 
List<PackageInfo> installedApps = new ArrayList<PackageInfo>(); 

for (PackageInfo apps : packageInfoList) { 
    if (!isSystemPackage(apps)) { 
     installedApps.add(apps); 
    } 

} 
Collections.sort(installedApps, new Comparator<PackageInfo>() { 
    public int compare(PackageInfo o1, PackageInfo o2) { 
     return o1.applicationInfo.loadLabel(getPackageManager()).toString().compareToIgnoreCase(o2.applicationInfo.loadLabel(getPackageManager()).toString()); 
    } 
}); 
for (PackageInfo apps : installedApps) { 
    packageInfoListApps.add(new Applications(apps, false, false)); 
} 

внутри от AsyncTask.

принять это new ApplicationAdapter(this, packageInfoListApps, mPackageManager) и сохранить ссылку на него, как в

ApplicationAdapter adater = new ApplicationAdapter(this, packageInfoListApps, mPackageManager) 

Затем начать диалог, как вы сделали свой прогресс и в вашем onPostCreate вызова

adapter.notifyDataSetChanged(); 

, который затем заполнить ListView и вы должен остановить ваш диалог, а затем

+0

Хорошо, я понимаю, почему загрузка приложения идет в 'doInBackground', но я все еще запутался в том, как передать эту загруженную информацию в следующую операцию; Я редактирую код выше, строка выше 'return null;' это где я предполагаю что-то hapens, а также inPostExecute? – mike

+0

вы не делаете этого в своей деятельности, которую хотите отобразить в – tyczj

Смежные вопросы