ListView mit mehreren Spalten und Values aus SQL

S

soern6

Ambitioniertes Mitglied
3
Hi,

ich gebe über eine Activity derzeit meine eingegebenen Daten an die SQL Umgebung,welche diese in der DB speichert und in einer anderen Activity über ein ListView darstellt. Wie ihr euch denken könnt, werden alle 8 Values in einer Zeile ohne Spaltenunterteilung angezeigt.
Nun wollte ich das ganze dann in 8 Spalten unterteilen und habe mich dabei wie folgt versucht:

Hier habe ich 8 Textviews erstellt, welche dann die Columns sein sollen:

Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/NDAColumn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/StartpunktColumn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/AgeColumn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/GeschlechtColumn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/DauerColumn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/GeschwindigkeitColumn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/StreckenprofilColumn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/DistanzColumn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1" />

</LinearLayout>

Hier habe ich ein paar Konstanten definiert:

Code:
package uni_hannover.sportapp;


public class Constants {

    public static final String FIRST_COLUMN="First";
    public static final String SECOND_COLUMN="Second";
    public static final String THIRD_COLUMN="Third";
    public static final String FOURTH_COLUMN="Fourth";
    public static final String FIFTH_COLUMN="Fifth";
    public static final String SIXTH_COLUMN="Sixth";
    public static final String SEVENTH_COLUMN="Seventh";
    public static final String EIGHTS_COLUMN="Eights";

}

und hier seht ihr meinen ListViewAdapter:

Code:
package uni_hannover.sportapp;

import static uni_hannover.sportapp.Constants.FIRST_COLUMN;
import static uni_hannover.sportapp.Constants.SECOND_COLUMN;
import static uni_hannover.sportapp.Constants.THIRD_COLUMN;
import static uni_hannover.sportapp.Constants.FOURTH_COLUMN;
import static uni_hannover.sportapp.Constants.FIFTH_COLUMN;
import static uni_hannover.sportapp.Constants.SIXTH_COLUMN;
import static uni_hannover.sportapp.Constants.SEVENTH_COLUMN;
import static uni_hannover.sportapp.Constants.EIGHTS_COLUMN;




import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ListViewAdapterCycling extends BaseAdapter{

    public ArrayList<HashMap<String, String>> list;
    Activity activity;
    TextView txtFirst;
    TextView txtSecond;
    TextView txtThird;
    TextView txtFourth;
    TextView txtFifth;
    TextView txtSixth;
    TextView txtSeventh;
    TextView txtEights;


    public ListViewAdapterCycling(Activity activity,ArrayList<HashMap<String, String>> list){
        super();
        this.activity=activity;
        this.list=list;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub



        LayoutInflater inflater=activity.getLayoutInflater();

        if(convertView == null){

            convertView=inflater.inflate(R.layout.column_row, null);

            txtFirst=(TextView) convertView.findViewById(R.id.NDAColumn);
            txtSecond=(TextView) convertView.findViewById(R.id.StartpunktColumn);
            txtThird=(TextView) convertView.findViewById(R.id.AgeColumn);
            txtFourth=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
            txtFifth=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
            txtSixth=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
            txtSeventh=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
            txtEights=(TextView) convertView.findViewById(R.id.GeschlechtColumn);



        }

        HashMap<String, String> map=list.get(position);
        txtFirst.setText(map.get(FIRST_COLUMN));
        txtSecond.setText(map.get(SECOND_COLUMN));
        txtThird.setText(map.get(THIRD_COLUMN));
        txtFourth.setText(map.get(FOURTH_COLUMN));
        txtFifth.setText(map.get(FIFTH_COLUMN));
        txtSixth.setText(map.get(SIXTH_COLUMN));
        txtSeventh.setText(map.get(SEVENTH_COLUMN));
        txtEights.setText(map.get(EIGHTS_COLUMN));

        return convertView;
    }


}

ich zeige euch auch nochmal meine DB-Adapter:

Code:
package uni_hannover.sportapp;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class CyclingMemoDBHelper extends SQLiteOpenHelper {

    private static final String LOG_TAG =
            CyclingMemoDBHelper.class.getSimpleName();
    public static final String DB_NAME = "cycling.db";
    public static final int DB_VERSION = 1;

    public static final String TABLE_CYCLING = "cycling";

    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NDA = "NDA";
    public static final String COLUMN_Startpunkt = "Startpunkt";
    public static final String COLUMN_Age = "Age";
    public static final String COLUMN_Geschlecht = "Geschlecht";
    public static final String COLUMN_Dauer = "Dauer";
    public static final String COLUMN_Geschwindigkeit = "Geschwindigkeit";
    public static final String COLUMN_Streckenprofil = "Streckenprofil";
    public static final String COLUMN_Distanz = "Distanz";

    public static final String SQL_CREATE =
            "CREATE TABLE " + TABLE_CYCLING +
                    "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    COLUMN_NDA + " TEXT, " +
                    COLUMN_Startpunkt + " TEXT NOT NULL, " +
                    COLUMN_Age + " TEXT NOT NULL, " +
                    COLUMN_Geschlecht + " TEXT NOT NULL, " +
                    COLUMN_Dauer + " TEXT NOT NULL, " +
                    COLUMN_Geschwindigkeit + " TEXT NOT NULL, " +
                    COLUMN_Streckenprofil + " TEXT NOT NULL, " +
                    COLUMN_Distanz + " TEXT NOT NULL);";



    public CyclingMemoDBHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        Log.d(LOG_TAG, "DbHelper hat die Datenbank: " + getDatabaseName() + " erzeugt.");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            Log.d(LOG_TAG, "Die Tabelle wird mit SQL-Befehl: " + SQL_CREATE + " angelegt.");
            db.execSQL(SQL_CREATE);
        }
        catch (Exception ex) {
            Log.e(LOG_TAG, "Fehler beim Anlegen der Tabelle: " + ex.getMessage());
        }
    }

    @Override
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion){

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

    }




}


So, und hier soll das ganze nun im ListView angezeigt werden und da hakt es ein wenig.

Code:
package uni_hannover.sportapp;



import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.List;

import java.util.ArrayList;
import java.util.HashMap;
import android.widget.AdapterView;
import android.view.View;
import android.widget.Toast;

public class Cycling_Join extends AppCompatActivity {

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

    private CyclingMemoDataSource dataSource;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cycling__join);


        dataSource = new CyclingMemoDataSource(this);

        Log.d(LOG_TAG, "Die Datenquelle wird geöffnet.");
        dataSource.open();




        Log.d(LOG_TAG, "Folgende Einträge sind in der Datenbank vorhanden:");
        showAllListEntries();


        Log.d(LOG_TAG, "Die Datenquelle wird geschlossen.");
        dataSource.close();
    }

    private void showAllListEntries () {
        List<CyclingMemo> cyclingMemoList =
                dataSource.getAllCyclingMemos();

        ArrayAdapter<CyclingMemo> cyclingMemoArrayAdapter = new ArrayAdapter<> (
                this,
                android.R.layout.simple_list_item_multiple_choice,
                cyclingMemoList);

        ListView shoppingMemosListView = (ListView) findViewById(R.id.cycling_memos);
        shoppingMemosListView.setAdapter(cyclingMemoArrayAdapter);

       

    }


    @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_cycling__join, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

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

        return super.onOptionsItemSelected(item);
    }
}

Macht man das ganze jetzt irgendwie über eine HashMap welche man mit der SQL verbindet oder wie sieht das aus?

Wäre schön, wenn mir wer helfen könnte.

Viele Grüße
 
Ich finde ich in deiner SQLiteOpenHelper Klasse keine Funktion "getAllCyclingMemos()" und in deiner Activity benutzt du als Klasse für deine SQlite Daten auch nicht die im Post angegebene Klasse "CyclingMemoDBHelper" sondern "CyclingMemoDataSource".
Bei dem Array Adapter sieht es ähnlich aus, du hast extra einen eigenen Adapter erstellt, nutzt aber in deiner Activity einen normalen ArrayAdapter.

mfg
Feuerstern
 
Ich habe leider nur wenig Erfahrung mit dem Adapter aber vllt mal mit einer ArrayList probieren?!

Ansosnten ahbe ich eine Seite für mich persönlich mal vorgespecihert in Chrome die ich in naher Zukunft mal durcharbeiten muss : Using lists in Android (ListView) - Tutorial

da steht alles was du brauchst kompakt auf einer Seite.
 

Ähnliche Themen

M
  • mafoma63
Antworten
2
Aufrufe
762
swa00
swa00
B
Antworten
3
Aufrufe
1.312
swa00
swa00
A
Antworten
10
Aufrufe
1.025
swa00
swa00
Zurück
Oben Unten