2017-03-12 4 views
0

Ich kann meine Antwort hier auf diese Frage nicht ganz finden, aber ich habe eine Aktivität mit einer ListView aus einer Datenbank.aktualisieren Aktivität mit aktualisierten Variablen

String ascOrDescFilter = " ASC"; 
String columnFilter = "amount"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    helper = new DatabaseHelper(this); 
    dbList= new ArrayList<DatabaseModel>(); 
    dbList = helper.getDataFromFilteredDB(columnFilter, ascOrDescFilter);` 

Ich möchte meine Aktivität aktualisieren, während ich aktualisierte Variablen einfüge, die der Benutzer in einem Kontextmenü ändern kann.

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
     case R.id.schedule: 
      columnFilter="spare1"; 
      ascOrDescFilter= " ASC"; 
      //dbList = helper.getDataFromFilteredDB("spare1", " ASC"); 
      onRestart(); 
      return true; 
     case R.id.amount: 
      columnFilter="spare1"; 
      ascOrDescFilter= " ASC"; 
      //dbList = helper.getDataFromFilteredDB("balance", " DESC");; 
      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 
} 

Ich denke, ich muss onRestart oder onResume aufrufen? aber ich bin mir nicht sicher, wie ich diese für meine Tätigkeit umsetzen soll. Brauche ich eine Absicht? Wie Sie aus dem obigen Programm sehen können, habe ich es mit einer onStart-Methode (und onResume + onRecreate) versucht, aber nichts wird meine Listview aktualisieren.

@Override 
public void onRestart() 
{ 
    super.onRestart(); 
    startActivity(getIntent()); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
} 

//@Override 
protected void onRecreate() { 
    super.onResume(); 
    this.onCreate(null); 
} 

Danke, alle Zeiger wären sehr hilfreich. Dies ist meine erste App, die ich selbst entwickelt habe.

+0

Keine Notwendigkeit, starten Sie Ihre Aktivität:

Das könnte Sie mit Adaptern gestartet. Aktualisieren Sie einfach die Listenansicht. Wie der kommentierte Teil in Ihrem Code. Funktioniert es? Und wenn nicht, warum? –

Antwort

0

Verwenden Sie einfach einen Adapter mit Ihrem ListView und wenn Sie die Daten ändern, aktualisieren Sie einfach die Daten in der Liste und rufen Sie adapter.notifyDataSetChanged().

Wenn Sie Ihren eigenen Adapter schreiben möchten, erweitern Sie ihn von BaseAdapter, sonst ist ArrayAdapter am einfachsten zu verwenden. https://guides.codepath.com/android/Using-an-ArrayAdapter-with-ListView

+0

Danke, ich habe dies als richtige Antwort markiert, obwohl notifyDataSetChanged() für mich nicht vollständig funktionierte. Ich habe, was ich will arbeiten, aber ich muss den Code untersuchen und herausfinden, was genau los ist. Seit Donnerstag bin ich auf dieses Thema gestoßen, also waren beide Antworten hilfreich. @Schokokuchen Bäcker Ich habe mit Code herumgetüftelt, um herauszufinden, was schief läuft. Ich weiß, dass die Werte nicht übereinstimmen, aber dieser Code hätte funktionieren sollen, wenn notifyDataSetChanged implementiert wurde. Ich dachte über Resume oder onRestart war meine Lösung, danke, dass Sie beide in die richtige Richtung zeigen. – MarkC

+0

Keine Sorgen. Froh, dass ich helfen konnte! –

Verwandte Themen