ProgressDialog und ApplicationListActivity

  • 1 Antworten
  • Letztes Antwortdatum
E

enrem

Erfahrenes Mitglied
29
Hallo, ich verstehe es einfach nicht!

In der Klasse ApplicationListActivity fülle ich ein Array "_ApplicationListData" mit den installierten Anwendungen. Anschließend sortiere ich das Array und packe den Kram mit Hilfe des ListViewAdapters in die Listview.

Warum um Himmels Willen kann ich, während ich die Daten aufbereite, keinen Wartendialog anzeigen? Dieser Dialog erscheint einfach nicht.

Code:
public class ApplicationListActivity extends ListActivity {

    private ArrayList<ApplicationListDataStructure> _ApplicationListData = new ArrayList<ApplicationListDataStructure>();
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // Layout aus der XML-Datei        
        setContentView(R.layout.application_list_activity);

        // Wartendialog an
        ProgressDialog progressDialog = ProgressDialog.show(ApplicationListActivity.this, "","Loading...");
        
        // Anwendungen in ein Array packen
        fillRecordsLauncher();
        
        // Array sortieren
        Collections.sort(_ApplicationListData, new ApplicationListDataComparator());

        // Wartendialog aus
        progressDialog.dismiss();
        
        // Listview klar machen
        ApplicationListAdapter ownArrayAdapter = new ApplicationListAdapter(this, _ApplicationListData);
        setListAdapter(ownArrayAdapter);        

    }
Im eigenen Thread geht auch nicht.

Code:
public class ApplicationListActivity extends ListActivity {

    private ArrayList<ApplicationListDataStructure> _ApplicationListData = new ArrayList<ApplicationListDataStructure>();
    private ProgressDialog _progressDialog;
    private boolean _wait = true; 
            
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // Layout aus der XML-Datei        
        setContentView(R.layout.application_list_activity);
        
        _progressDialog = ProgressDialog.show(ApplicationListActivity.this, "", "Loading...");
        new Thread() {
            public void run() {

                try {

                    // Anwendungen in ein Array packen
                    fillRecordsLauncher();
                    
                    // Array sortieren
                    Collections.sort(_ApplicationListData, new ApplicationListDataComparator());

                
                } catch (Exception e) {
                    Log.e("tag", e.getMessage());
                }
                _progressDialog.dismiss();
                _wait = false;
            }
        }.start();        
        
        while(_wait);
        
        ApplicationListAdapter ownArrayAdapter = new ApplicationListAdapter(this, _ApplicationListData);
        setListAdapter(ownArrayAdapter);        

    }
Ich wäre echt Dankbar, wenn Ihr mir eine einfache Lösung anbieten könnt.
 
Hier habe ich die Lösung gefunden :thumbsup:

Code:
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Layout aus der XML-Datei        
        setContentView(R.layout.application_list_activity);
        
        // Anwendungen im Hintergrund laden (eigener Thread)
        new LoadApps().execute();        
        
    }
Hier die Klasse LoadApps

Code:
    /**
     * Hintergrund Async Task zum laden der Apps
     * */
    class LoadApps extends AsyncTask<String, String, String> {
 
        /**
         * Bevor der Hintergrund thread startet, den Wartendialog anzeigen
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(ApplicationListActivity.this);
            pDialog.setMessage("Bitte warten ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }
 
        /**
         * Im Hintergrund die Apps laden
         * */
        protected String doInBackground(String... args) {
           
            final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
            mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
            List<ResolveInfo> installedApplications = (List<ResolveInfo>) getPackageManager().queryIntentActivities( mainIntent, 0);
 
            try {

                  for (ResolveInfo info : installedApplications)
                  {
                      
                    // Informationen zur Anwendung
                      ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;

                      //Log.d("MyApp", ""+applicationInfo.packageName);

                      // Datensatz in eigene Datenbank anfügen.
                      ApplicationListDataStructure rec = new ApplicationListDataStructure();
                      
                      rec.set_appname(info.loadLabel(getPackageManager()).toString());
                      rec.set_icon( info.loadIcon(getPackageManager()) );
                      rec.set_pname(applicationInfo.packageName);
                      
                      // Informationen aus dem Paket lesen
                      PackageInfo pInfo;
                      try {
                          pInfo = getPackageManager().getPackageInfo(applicationInfo.packageName, 0);
                          rec.set_versionName(pInfo.versionName);
                          rec.set_versionCode(pInfo.versionCode);
                          
                      } catch (NameNotFoundException e) {
                          // TODO Auto-generated catch block
                          e.printStackTrace();
                          rec.set_versionName("");
                          rec.set_versionCode(0);
                      }

                      // Die eigene Anwendung nicht in die Liste packen.
                      if( ! applicationInfo.packageName.equals(getPackageName())){
                          _ApplicationListData.add(rec);
                      }
                          
                  }
                

            } catch (Exception e) {
                e.printStackTrace();
            }

            // Anschl. Array sortieren
            Collections.sort(_ApplicationListData, new ApplicationListDataComparator());

            return null;
        }
 
        /**
         * Nachdem die Liste der Apps im Hintergrund erzeugt wurde, den Wartendialog schließen.
         * **/
        protected void onPostExecute(String file_url) {
            // Wartendialog schließen
            pDialog.dismiss();
            // Aktualisieren des UI aus dem Hintergrund Thread
            runOnUiThread(new Runnable() {
                public void run() {
                    /**
                     * Update ListView..
                     * */
                    
                    ApplicationListAdapter ownArrayAdapter = new ApplicationListAdapter(ApplicationListActivity.this, _ApplicationListData);
                    setListAdapter(ownArrayAdapter);        
                    
                }
            });
 
        }
 
    }
 
Zuletzt bearbeitet:
Zurück
Oben Unten