Button in ListView mit SQLite Daten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Button in ListView mit SQLite Daten

    Guten Nabend zusammen!

    Ich bin gerade dabei eine App zu erstellen, in der ich das TabLayout verwenden. Unter einem Tab befindet sich eine ListView. Nun möchte ich aber innerhalb der ListView oben einen Button einfügen über den ich dann auf eine normale View komme um neue Datensätze in die Datenbank zu speichern die dann später in der ListView ausgegeben werden.

    Ich bin noch relativ neu in der Android Entwicklung und stelle mich gerade vllt ein klein wenig doof an. ?(

    Meine Activity für die ListView sieht wie folgt aus:

    Quellcode

    1. public class FavoritesActivity extends ListActivity {
    2. private FavsDAO dao;
    3. private SimpleCursorAdapter dbAdapter;
    4. public void onCreate(Bundle savedInstanceState){
    5. super.onCreate(savedInstanceState);
    6. //setContentView(R.layout.favs_add_view);
    7. dao = new FavsDAO(this);
    8. Cursor favsList = dao.fetchAllFavs();
    9. String[] from = new String[]{
    10. FavsDAO.MY_TEXT
    11. };
    12. int[] target = new int[]{
    13. R.id.listText
    14. };
    15. dbAdapter = new SimpleCursorAdapter(this, R.layout.favs_view, favsList, from, target);
    16. setListAdapter(dbAdapter);
    17. }
    18. }
    Alles anzeigen



    Und meine Layout XML:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:orientation="vertical" >
    6. <TextView
    7. android:id="@+id/listText"
    8. android:layout_width="wrap_content"
    9. android:layout_height="wrap_content"
    10. android:text="Medium Text"
    11. android:textAppearance="?android:attr/textAppearanceMedium" />
    12. </LinearLayout>
    Alles anzeigen



    Ich denke mal das Problem wird sein, dass ich in der Activity kein Layout mit setContent aufrufe bzw. über setListAdapter die Liste erzeuge. Wie gesagt, bin noch recht neu in der Android Entwicklung und komme ursprünglich aus der iOS Entwicklung. Dort würde ich mir über Code einen Button erzeugen und über der Liste positionieren. Ich habe schon bereits in allen meiner Bücher nachgeschaut und natürlich Tante Google befragt, finde aber leider nicht das was ich benötige.

    Besten Danke erstmal.

    Grüße aus dem Münsterland :P

    EDIT:

    Nabend nochmal. Ich habe nun erst einmal einen neuen Tab hinzugefügt wo ich dann neue Einträge erzeugen kann. Ist zwar nicht gerade Usability aber ich muss auch ein wenig weiter kommen.

    Mein nächstes Problem ist ein wohl schon bekanntes: Wie kann ich meine ListView mit Datenbank Daten innerhalb eines TableLayouts aktualisieren???

    Ok, ich habe bis gerade gefühlte 300 Beiträge aufgerufen. Da wird empfohlen den Cursor mit requery neu aufzurufen und vorher den adapter die anweisung notifyDataSetChanged() zuzuspielen....nu habe ich erstmal überlegt, in welche methode ich das einsetze. in der onCreate() macht es ja keinen Sinn und die onResume() springt nicht auf den Tabwechsel an. Nu hab ich meiner MainActivity einfach setOnTabChangedListener eingesetzt und über die id den Tab abgefragt um dann in der favActivity eine Methode aufzurufen wo ich dann dem cursor und dem adapter die anweisungen zuspiele.


    Das gibt aber so eine Schelle von Android, dass ich es gleich wieder lasse...ich denke mal, dass die methode beim ersten tabwechsel vor der onCreate ausgeführt wird und der cursor und der adapter noch nicht bereit sind. Obwohl ich es auch schnon eine dreckige Variante probiert habe, in der ich in der MainActivity eine int var bei dem Tabwechsel hochgezählt habe und den wert der Methode in der FavActivity übergeben habe um dann mittels einer if Bedingung das Ausführen hinter dem ersten onCreate zu setzen...also erst beim zweiten Favaufruf wird diese Methode ausgeführt, aber auch da "ERROR!!!"


    Kann mir da jemand einen Tipp geben? Ich kann Daten eintragen, nur muss ich halt erst die Anwendung neu starten damit diese in der Liste angezeigt werden und das geht ja mal überhaupt nicht....


    Ich hatte auch etwas davon gelesen, die Activity zu schließen und dann wieder neu aufzurufen...das hat aber auch nicht funktioniert. :S ?( :S

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von 3ncrypt0 ()

  • Hi 3ncrypt0,

    Nun möchte ich aber innerhalb der ListView oben einen Button einfügen...


    Meinst du so das sich beim hoch und runter scrollen der Button verschwindet quasie das oberste Element in der Liste oder soll der Button über der Liste sein?

    Da ich nicht genau verstehe was du machen möchtest hier die Kurzfassung:

    Oberste Element:
    1.) erstellst einen Button (entweder in deinen Code oder du erstellst ein seperates Layout mit einen Button)
    2.) fügst diesen Button/Layout der Liste als Header hinzu

    Button über der Liste:
    1. erstellst ein Layout:

    Quellcode

    1. <Button
    2. android:id="@+id/neueEintrag"
    3. >
    4. <ListView
    5. android:id="@android:id/list"
    6. >

    2.) in deinem Code setzt du das Layout mittels setContentView
    3.) listView kann so bleiben wie sie jetzt ist und auf den Button greifst du per findViewById zu

    So zewcks der Datenbankgeschichte:
    notifyDataSetChanged() geht nicht bei Datenbank abfragen(jedenfalls ging es nicht bei mir). du musst einen neue DB abfrage machen und "dbAdapter.changeCursor(cursor)" aufrufen.

    Hoffe das bringt dich ein bissel weiter
    Mfg Titus
  • Hi titus,

    bzgl. des Buttons in der Listview, werde ich das so nicht umsetzen könnnen, denn ich habe keine XML in der ich die ListView definieren. Ich rufe auch in meiner Activity kein Layout mit setContent auf. Und wenn ich es versuche, stürzt meine App direkt ab.

    Die Daten in der Liste zu aktualisieren ist ein wenig schwierig, denn ich habe ja keine Möglichkeit eine Methode aufzurufen wenn ich den Tab der Listview wechsle. onResume() greift da nicht und über die MainActivity den Tabwechsel abzufangen hat auch nichts gebracht.

    Hier nochmal meine FavsActitivty mit der Liste:

    Quellcode

    1. package de.adcont.myvoice;
    2. import android.app.ListActivity;
    3. import android.database.Cursor;
    4. import android.os.Bundle;
    5. import android.view.View;
    6. import android.widget.AdapterView;
    7. import android.widget.AdapterView.OnItemClickListener;
    8. import android.widget.ListView;
    9. import android.widget.SimpleCursorAdapter;
    10. import de.adcont.classes.FavsDAO;
    11. public class FavoritesActivity extends ListActivity {
    12. private FavsDAO dao;
    13. private SimpleCursorAdapter dbAdapter;
    14. private Cursor favsList = null;
    15. public void onCreate(Bundle savedInstanceState) {
    16. super.onCreate(savedInstanceState);
    17. //setContentView(R.layout.favs_view);
    18. dao = new FavsDAO(this);
    19. favsList = dao.fetchAllFavs();
    20. String[] from = new String[] { FavsDAO.MY_TEXT };
    21. int[] target = new int[] { R.id.listText };
    22. dbAdapter = new SimpleCursorAdapter(this, R.layout.favs_view, favsList,
    23. from, target);
    24. setListAdapter(dbAdapter);
    25. // Toast.makeText(this,"Selected",Toast.LENGTH_SHORT).show();
    26. // System.out.println("Resume Funktion");
    27. ListView lv = getListView();
    28. // listening to single list item on click
    29. lv.setOnItemClickListener(new OnItemClickListener() {
    30. public void onItemClick(AdapterView<?> parent, View view,
    31. int position, long id) {
    32. dbAdapter.changeCursor(favsList);
    33. System.out.println("Jetzt aktualisieren");
    34. }
    35. });
    36. }
    37. }
    Alles anzeigen



    Ich greife nun zum testen auf die setOnItemClickListener() Methode zurück...da war eigentlich geplant, dass ich wenn ich einen Listeintrag anklicke eine Singleview angezeigt werden soll. Aber was soll ich sage...FAIL!

    Der Button in der Listview soll einfach ganz oben über der Listview stehen. Ob mit Scrollt oder fixed ist, ist mir eigentlich egal....

    EDIT:

    So, ich habe gerade noch einmal gesucht und bin dabei auf das gestoßen: stackoverflow.com/questions/47…buttons-to-a-listactivity

    Nach diesem Beispiel kann ich nun auf einmal eine Listview mit setContentView laden und auch einen Button einsetzen.... Ich denke mal, dass es mit dem XML Layout zusammenhängt. Nun kann ich auch bestimmt in einer eigenen Methode noch einmal die Daten aus der DB fetchen und in der Liste anzeigen. Muss man halt auf einen Reload Button drücken....

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von 3ncrypt0 ()