Listview per klick o Spinner aktualisieren

C

Chris92

Fortgeschrittenes Mitglied
0
Hallo ich wollte fragen wie man eine ListView per Klick auf einen Spinner aktualisieren kann. Bis jetzt finde ich heraus welche Item im Spinner angeklickt wurde doch ich finde nix was mir weiter Hilft um die Listview zu aktualisieren.

MFG Chris92
 
Ich hoffe, dass ich dich richtig verstanden habe. Du willst im ListView änderungen vornehmen wenn der wert im spinner geändert wurde?

Füge dem Spinner einen ChangeListener hinzu und aktualisiere dann die ListView wenn der StateChanged event ausgeführt wurde

Grüße
 
Hallo Danke für deine Antwort doch ich finde kein ChangeListener event bei meinem Spinner. :sad: Wenns geht könntest du mir kurz ein Stück Code zeigen wo das angewendet wird und wie man eine Listview dann neu lädt.

Also versuche nochmals mein Problem besser zu erklären. Am Anfang wird die ListView mit allen Trainingsübung aufgefüllt dann kann man über einen Spinner z.B: Bizeps ausfällen dann sollen in der ListView nur die Übungen für den Bizeps stehen. Ich hab bereits die string arrays für die Übungen erstellt doch mir fehlen die Befehle und die richtige Kenntnis wie man die einsetzt um die ListView zu aktualisieren.

MFG Chris92
 
Wenn du mit einer SQL-Datenbank und einem simplen Adapter arbeitest, kann ein einfaches "mAdapter.getCursor().requery()" nach der Neuanlage oder dem editieren reichen.

mAdapter ist eine Variable indem der Adapter steckt...

In diesem Beipspiel klappt das.

Schnipsel:RM Dictionary ? Android-Schnipsel-Wiki

Gruß enrem

Ich habe gerade deinen neuen Beitrag gelesen. Ich schlage dir vor du machst dir eine SQL-Datenbank. Das Beispiel hast du ja. Dann füllst deinen Spinner mit Filterbedingungen. Bizeps, Trizeps, Latissimus usw. In der Tabelle SQL-Tabelle packst du deine Trainingsübungen. Beispiel Bizeps mit Datum usw. Nun kannst du bequem über eine SQL-Abfrage mit like einen Filter auf die SQL-Tabelle mit deinen Trainigsübungen setzen. Entweder über einen Zeitraum oder über einen Muskel.

Im Beispiel Dictionary ist fast alles was du benötigst, bis auf den Filter mit dem Spinner. Dafür gibt es dort ein suchen. Ist im Grunde ein Filtern in der Tabelle.

Ich hoffe ich habe dich richtig verstanden.
 
Zuletzt bearbeitet:
Nee ich arbeite nicht mit einer SQL Datenbank die werte stehen einfach in der Datei arrays.xml im Verzeichnis res/values
 
Es kommen doch sicherlich immer wieder neue Trainigsübungen hinzu oder? Packst du die dann auch in dein Array oder sind die Trainigsübungen auf eine bestimmte Anzahl beschränkt.

Ich frage danach, weil wenn du Daten sammelst, ist es besser und einfacher die in einer SQL-Datenbank bzw. Tabelle zu packen. Du hast später je nach dem was du machen möchtest mehr möglichkeiten.
 
Ich willst so lassen denn sonst braucht man immer eine Verbindung mit dem Internet und das finde ich nicht so gudd.
 
Nein Chris92 du musst ja nicht die Datenbank auf einen Webserver packen.

Datenbank hört sich kompliziert an, ist es aber nicht. Im Grunde ist es nur eine Datei die du auf deinem Handy in der Applikation oder auf der SD-Karte ablegen kannst. Android besitzt SQLite und regelt das meiste für dich.

Hier siehts du wie einfach man eine Datenbank anlegt (Datei auf der SD-Karte) und wie du damit umgehen kannst.

Schnipsel:RM SQL SDCard ? Android-Schnipsel-Wiki
 
Achso ok dann versuch ich das mal. Danke für die Hilfe
 
Chris92 schrieb:
Hallo Danke für deine Antwort doch ich finde kein ChangeListener event bei meinem Spinner. :sad: Wenns geht könntest du mir kurz ein Stück Code zeigen wo das angewendet wird und wie man eine Listview dann neu lädt.

Also versuche nochmals mein Problem besser zu erklären. Am Anfang wird die ListView mit allen Trainingsübung aufgefüllt dann kann man über einen Spinner z.B: Bizeps ausfällen dann sollen in der ListView nur die Übungen für den Bizeps stehen. Ich hab bereits die string arrays für die Übungen erstellt doch mir fehlen die Befehle und die richtige Kenntnis wie man die einsetzt um die ListView zu aktualisieren.

MFG Chris92

Sorry war grad zu java fixiert^^ Muss nachm formatieren erst wieder Eclipse etc installieren, dann kann ich ma schauen...

Erkennt man in deinem String array was bizeps Übungen sind?
 
Ja ich hab verschiedene arrays erstelle eine für Alle Übungen und eine für Bizeps z.B das sind verschiedene Arrays ich muss es nur irgendwie hin bekommen diese arrays dann im richtigen Moment hinein zuladen in die ListView.

MFG Chris92
 
hab grad mal in die dev docs geschaut.

Definition des Listeners:
Code:
public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
      Toast.makeText(parent.getContext()), "The planet is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}
Zuweisung:
Code:
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
kannste hier unter punkt 5 und 6 nachlesen:

Spinner | Android Developers

grüße
 
So ich bins wieder sry dass ich lange nichts mehr geschrieben habe, doch ich hatte viel zutun mit der Schule. Doch jetzt arbeite ich weiter daran und ich habs geschafft die Datenbank zu erstellen doch jetzt steh ich bei einem weiteren Problem: Ich weis nicht wie ich das schnell und ohne weiteren Aufwand hin bekomme 100 Übungen in die Datenbank einzufügen. Mit dem Programm wo auf der Seite war kann man ja Records hinzufügen doch nur einzeln und das 100mal zu erledigen finde ich blödsin, das muss doch irgendwie anders möglich sein. Aber wie??


MFG Chris92
 
Ist gut ich habs herausgefunden. Ich habs mit CSV gelöst.

MFG Chris92
 
Wenn du Datensätze in deiner App hinzufügen möchtest geht das so:

Code:
success = execute("INSERT OR IGNORE INTO Tabelle1("+
          "'Feld1','Feld2','Feld3','Feld4') "+
          "VALUES ('Wert 1','Wert 2','Wert 3','Wert 4')");
oder

Code:
// Rückgabe -1 == Fehler, sonst die aktuelle ROWID
long inserResult;
        
ContentValues values = new ContentValues();

values.put("Feld1", "Dein Wert für Feld 1");
values.put("Feld2", "Dein Wert für Feld 2");

inserResult = mDatabase.insert("Tabelle1", null, values);
mDatabase ist deine Datenbank.
Tabelle1 ist deine Tabelle für die Übungen
Feld1 usw. sind die Feldattribute bzw. Feldnamen.

Macht Sinn wenn du unter Android weitere Übungen hinzufügen möchtest.

Noch ein Tipp!!!

Mach dir in jeder Tabelle ein Feld _id mit einem Autoincrement. Sonst funktioniert der SimpleListViewAdapter nicht mit der ListView. Gibt zwar andere Wege die Probleme zu lösen, damit ersparst du dir jedoch später Arbeit.

Code:
"_id INTEGER PRIMARY KEY AUTOINCREMENT"
Gruß enrem
 
Also ich bekomme es hin die Daten die in der Datenbank stehen in einer Textview anzuzeigen und jetzt will ich diese Daten in eine Listview schreiben doch ich weis nicht wie :( weis du vieleicht wie das geht?

MFG Chris92
 
Kannst du hiermit was anfangen?

in der onCreate mach folgendes:

Code:
        // mDB ist deine Datenbank die solltest du bereits offen haben...
        
    // Den Inhalt der ListView erzeugen. Angezeigt wird das Attribut Auswahl.
        initListView("SELECT _id,  Feld1 AS Auswahl FROM Tabelle1");
die Methode initListView()

Code:
 private void initListView(String sql){
        
        // Du wirst getDatabase() nicht benötigen. Du kannst rawQuery direkt auf dein Datenbankobjekt anwenden.
        // also so Cursor cur = mDB.rawQuery(sql, null);

        // Abfrage erstellen. In cur ist das Ergebnis der Abfrage.
        Cursor cur = mDB.getDatabase().rawQuery(sql, null);
        
        if (cur != null) {
              // Einen Adapter ertellen und der ListView zuweisen..
           startManagingCursor(cur);
           mAdapter = new SimpleCursorAdapter(this, R.layout.dictionary_list, cur,
                       new String[] { "Auswahl" }, new int[] { android.R.id.text1 });
           setListAdapter(mAdapter);
        }
    }
Ich hoffe du kannst was damit anfangen. Du benötigst ein Layout mit ner ListView. Im Beispiel nennt sich das Layout dictionary_list. Die Methode initListView kannst du später an anderer Stelle aufrufen, wenn du mal dein Inhalt der Listview filtern möchtest. Ich nenne das Feld immer Auswahl, denn du kannst in der SQL-Abfrage mehrere Felder mit 2 pipes (||) zusammenfassen. Also "Feld1 || Feld2 AS Asuwahl". Das hat den Vorteil das du ohne grossen Aufwand mehrere Felder in der ListView anzeigen lassen kannst. Das aber später...

Hier das Layout "res/layout/dictionary_list.xml" :

Code:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:id="@+id/LinearLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android">
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.mainlist_item, c,
                    new String[] { "Zeitpunkt", "Menge" }, new int[] { android.R.id.text1, android.R.id.text1 });
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="?android:attr/listPreferredItemHeight" android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_vertical" android:paddingLeft="5dip" android:layout_width="fill_parent" android:singleLine="false" android:id="@android:id/text1"/>

</LinearLayout>
Habe später etwas mehr Zeit dir das genauer zu erklären...
 
Zuletzt bearbeitet:
Irgendwie klappt das nicht :(. Hier ist der Code:

Datei:EigenesTraining.java
Code:
package lu.projekt.FitnessApp;

import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class EigenesTraining extends Activity {
      private SimpleCursorAdapter adapterM;
      private SQLiteDatabase db = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.eigenestraining);
    
    //Datenbank deklarieren
    
    String path = "/sdcard/renem_sql_sdcard2.db";
    db = SQLiteDatabase.openOrCreateDatabase(path, null);    
    
    initListView("SELECT _ID,  Uebungen AS Auswahl FROM AlleUebungen");

  }

    private void initListView(String sql) {
        // TODO Auto-generated method stub
         Cursor cur = db.rawQuery(sql, null);
            
            if (cur != null) {
                  // Einen Adapter ertellen und der ListView zuweisen..
               startManagingCursor(cur);
               adapterM = new SimpleCursorAdapter(this, R.layout.listitem, cur,
                           new String[] { "Auswahl" }, new int[] { android.R.id.text1 });
               setListAdapter(adapterM);
            }

        
    }

    private void setListAdapter(SimpleCursorAdapter adapterM2) {
        // TODO Auto-generated method stub
        
    }
}
Datei: listitem.xml

Code:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:id="@+id/LinearLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android">
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.mainlist_item, c,
                    new String[] { "Zeitpunkt", "Menge" }, new int[] { android.R.id.text1, android.R.id.text1 });
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="?android:attr/listPreferredItemHeight" android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_vertical" android:paddingLeft="5dip" android:layout_width="fill_parent" android:singleLine="false" android:id="@android:id/text1"/>

</LinearLayout>
Wenn ich das Programm starten stürtzt es ab wenn ich auf die Activity EigenesTraining wechsele :(.


Hier ein Bild wie meine Datenbank aussieht:

moz-screenshot.png
moz-screenshot-1.png
moz-screenshot-2.png



MFG Chris92
 

Anhänge

  • Sans titre2.png
    Sans titre2.png
    16 KB · Aufrufe: 273
Hast du die Activity in der Manifestdatei eingetragen? Das vergesse ich auch häufig und führt zum Absturz. Wenn du nicht klar kommst, schick mir die Datenbank, ich mach dir anschl. ein Beispiel :)
 
Ich sehe gerade hast du ein Feld "_id" nicht "ID" der Unterstrich ist wichtig!
 

Ähnliche Themen

B
Antworten
6
Aufrufe
1.050
jogimuc
J
A
Antworten
10
Aufrufe
1.018
swa00
swa00
C
Antworten
8
Aufrufe
1.123
swa00
swa00
Zurück
Oben Unten