ListView Refresh

  • 2 Antworten
  • Letztes Antwortdatum
B

Braesident

Ambitioniertes Mitglied
1
Hi Leute,

ich weiß es gibt unzählige Ergebnisse im Internet. Trotzdem konnte ich das Problem noch nicht lösen.

In meinem Fall ist es so dass ich ein ListView in meiner MainActivity habe das mir Dateien aus einem Ordner auflistet. In einer zweiten Activity füge ich eine neue Datei auf der SD-Karte hinzu, welche dann nach rückkehr in die MainAct. mit aufgelistet sein sollte.
Der versprechenste Lösungsvorschlag war notifyDataSetChanged() .
Habe es aber leider noch nicht hinbekommen.
Code:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    public static final String LOG_TAG = MainActivity.class.getSimpleName();

    ArrayAdapter arrayAdapter1;
    ListView dateiListe;
    File     file1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
       
        Log.d(LOG_TAG, "onCreate");

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent("de.meinname.vertraege.DOKUMENTNEU"));
            }
        });

        try {

            //Dateien Lesen
            file1 = new File(Environment.getExternalStorageDirectory() + "/Dokumente/");
            if (!file1.exists()){
                file1.mkdir();
            }
            FilenameFilter fFilter = new FilenameFilter() {
                @Override
                public boolean accept(File dir, String filename) {
                    String lowerCaseName = filename.toLowerCase();
                    if (lowerCaseName.endsWith(".txt")) {
                        return true;
                    } else {
                        return false;
                    }
                }
            };
           arrayAdapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, file1.list(fFilter));

            dateiListe = (ListView) findViewById(R.id.lvDateien);
            dateiListe.setAdapter(arrayAdapter1);
            dateiListe.setOnItemClickListener(this);
           
        } catch (Exception e) {
            Log.d(LOG_TAG, "FEHLER: " + e);
        }

    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "onResume ausgeführt");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "onRestart ausgeführt");
        arrayAdapter1.notifyDataSetChanged();
        //dateiListe.setAdapter(arrayAdapter1);  // auch hiermit probiert
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Dokument aus ListView öffnen / bearbeiten
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
 
Hi Kardroid,

startActivityForResult liefert ja Daten zurück an die aufrufende Activity. Dies mache ich allerdings in diesem Fall nicht. Es soll ja nur etwas ausgeführt werden wenn ich in die aufrufende Activity zurück kehre. Nämlich einen Dateipfad erneut lesen und dann das ListView aktuallisieren. Ich dachte dafür würde onRestart genügen.
Oder kann ich aus der onRestart heraus nicht Refreshen? - Wo ich bei der nächsten Frage wäre, wie
Kardroid schrieb:
kannst du beim zurückkommen einfach refreshen.
mit notifyDataSetChanged oder gibt es etwas wie MainActivity.refresh?
[doublepost=1451423337,1451418955][/doublepost]jetzt geht es erstmal - ob es die beste Variante ist weiß ich noch nicht.

ich hab die Definition des Filters mal an den Anfang gestellt
Code:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    public static final String LOG_TAG = MainActivity.class.getSimpleName();

    ArrayAdapter    arrayAdapter1;
    ListView        dateiListe;
    File            file1;
    FilenameFilter  fFilter = new FilenameFilter() {
        @Override
        public boolean accept(File dir, String filename) {
            String lowerCaseName = filename.toLowerCase();
            return lowerCaseName.endsWith(".txt");
        }
    };

und die onRestart-Methode abgeändert
Code:
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "onRestart ausgeführt");
        arrayAdapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, file1.list(fFilter));
        dateiListe.setAdapter(arrayAdapter1);

    }
 
Zurück
Oben Unten