1. schnti, 02.08.2012 #1
    schnti

    schnti Threadstarter Neuer Benutzer

    Hallo zusammen,

    ich suche verzweifelt die Möglichkeit eine ListView aus einem Thread heraus zu aktualisieren.

    Ich habe folgenden Code:
    Code:
    import java.util.ArrayList;
    import java.util.List;
    
    import android.annotation.TargetApi;
    import android.app.ListActivity;
    import android.content.Context;
    import android.net.wifi.ScanResult;
    import android.net.wifi.WifiManager;
    import android.os.Bundle;
    import android.view.Menu;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.Toast;
    
    public class MainActivity extends ListActivity {
        WifiManager wifiManager;
    
        private ArrayList<String> wlanArrayList = new ArrayList<String>();;
        public ArrayAdapter<String> wlanArrayAdapter;
    
        Button scanButton;
        Thread searchThread;
    
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            wlanArrayAdapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, wlanArrayList);
            setListAdapter(wlanArrayAdapter);
    
            suchen();
    
        }
    
        public void suchen() {
    
            wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    
            Runnable updateThread = new Runnable() {
                @TargetApi(14)
                public void run() {
                    while (true) {
                        if (wifiManager.isWifiEnabled() == false) {
                            wifiManager.setWifiEnabled(true);
                        }
    
                        wlanArrayList.clear();
                        wifiManager.startScan();
    
                        List<ScanResult> WLANs = wifiManager.getScanResults();
    
                        try {
                            for (ScanResult WLAN : WLANs) {
                                wlanArrayList.add(WLAN.SSID + " | "
                                        + WLAN.frequency + " | " + WLAN.level);
                            }
    
                            wlanArrayAdapter.notifyDataSetChanged();
    
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
    
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            };
    
            Thread thread = new Thread(updateThread);
            thread.start();
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
    }
    
    Der Code funktioniert soweit, jedoch wird der ListView nur aktualisiert, wenn ich scrolle....

    Kann mir jemand weitelfen?
    Vielen Dank
     
  2. swordi, 02.08.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    du kannst keine UI Operationen in einem Thread machen.

    das musst du im UI thread erledigen
     
    schnti gefällt das.
  3. schnti, 10.08.2012 #3
    schnti

    schnti Threadstarter Neuer Benutzer

    vielen Dank, das hat mir sehr weitergeholfen.

    Meine Lösung:

    Um den Aufruf:
    Code:
    wlanArrayAdapter.notifyDataSetChanged();
    Folgenden Thread starten:
    Code:
    MainActivity.this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
           wlanArrayAdapter.notifyDataSetChanged();
         }
    });
    
    Ist diese Lösung so sinnvoll? Da ich ja nun wieder einen neuen Thread starte?

    Vielen Dank.
     
  4. swordi, 10.08.2012 #4
    swordi

    swordi Gewerbliches Mitglied

    du startest keinen neuen thread. du nutzt nur den vorhandenen ui thread
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[ERLEDIGT] Listview mit Datenbank über Custom ArrayList verbinden Android App Entwicklung 22.04.2017
[ERLEDIGT] Drawer mit scrollbarem Listview Android App Entwicklung 27.03.2017
[ERLEDIGT] Navigation Drawer stürzt ab nach dem schchließen durch thread Android App Entwicklung 13.03.2017
ListView fix am unteren Bildschirmrand ausgeben Android App Entwicklung 01.03.2017
Buttonfarbe ständig wechseln Android App Entwicklung 06.01.2017
ProgressBar in ListView Android App Entwicklung 03.01.2017
ListView Element an eine Datenbank senden Android App Entwicklung 04.12.2016
ListView Items verknüpfen Android App Entwicklung 06.10.2016
AlertDialog Listview mit ContextMenu Android App Entwicklung 01.10.2016
Du betrachtest das Thema "Aktualisierung ListView aus Thread" im Forum "Android App Entwicklung",