2016-07-31 7 views
0

Ich arbeite an einer kleinen App, die mir hilft, meine Ernährung zu verfolgen.Jetzt baue ich ein Layout mit einem Adapter.Für diesen Zweck verwende ich einen SimpleCursorAdapter, weil alle benötigten Daten aus meiner Datenbank kommt.Alles ging gut außer einem Ding:Wie IDs auf programmatisch erstellten Kontrollkästchen festgelegt werden?

Alle Kontrollkästchen hat die gleiche ID. Also kann ich nicht jeden einzelnen überprüfen. Es gibt eine Lösung, ich weiß, wie es gelöst werden kann, aber in diesem Fall kann ich keine XML-Datei verwenden, um IDs zu generieren, weil ich nicht weiß, wie viele Kontrollkästchen das nächste Mal, wenn ich die App ausführen werde.

Hier ist mein Code:

public void getIdAndDate() 
{ 
    db = new DATABASE(this); 

    SQLiteDatabase sqldb = db.getReadableDatabase(); 

    String[] Columns = {"_id", "date"}; 
    int[] toViews = {R.id.entry_id, R.id.entry_date}; 

    Cursor cursor1; 

    cursor1 = sqldb.query(db.TABLE_DAILY_CONSUMPTION, Columns, null, null, null, null, null); 

    numRows = cursor1.getCount(); 

    int id[] = new int[numRows]; 
    String date[] = new String[numRows]; 

    for(int i = 0; i<numRows; i++) 
    { 
     cursor1.moveToNext(); 
     id[i] = cursor1.getInt(0); 
     date[i] = cursor1.getString(1); 
    } 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.layout_entry, cursor1, Columns, toViews, 0); 
    entries.setAdapter(adapter); 
} 

Und das ist mein Layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/entry_id" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:textSize="20sp"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/entry_date" 
    android:layout_gravity="center_horizontal" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:textSize="20sp"/> 

<CheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/entry_selection" 
    android:layout_gravity="right" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    /> 

ich wirklich versuchen, herauszufinden, wie ich das Problem lösen kann, aber ich kann nicht einmal vorstellen, welche Möglichkeiten ich habe.

+0

Sie können 'setId' einfach zu Ihrer' CheckBox' Ansicht mit einem ganzzahligen Wert Ihrer Wahl aufrufen. Machst du das nur jetzt? – Shaishav

+0

http://stackoverflow.com/questions/5939392/android-checkable-listview und andere Ressourcen sind von einer Google-Suche auf "Android Listview Checkable" oder "Android Listview Checkbox" verfügbar. – CommonsWare

Antwort

0

Problem gelöst. Ich verwende keine Kontrollkästchen mehr. Stattdessen verwende ich die bereits vorhandenen Einträge und arbeite mit dem setOnItemClickListener und erstelle eine neue Funktion, um mit den Auswahlen umzugehen. Der neue Code:

public void getIdAndDate() 
{ 
    db = new DATABASE(this); 

    SQLiteDatabase sqldb = db.getReadableDatabase(); 

    String[] Columns = {"_id", "date"}; 
    int[] toViews = {R.id.entry_id, R.id.entry_date}; 

    Cursor cursor1; 

    cursor1 = sqldb.query(db.TABLE_DAILY_CONSUMPTION, Columns, null, null, null, null, null); 

    numRows = cursor1.getCount(); 

    int id[] = new int[numRows]; 
    String date[] = new String[numRows]; 

    for(int i = 0; i<numRows; i++) 
    { 
     cursor1.moveToNext(); 
     id[i] = cursor1.getInt(0); 
     date[i] = cursor1.getString(1); 
    } 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.layout_entry, cursor1, Columns, toViews, 0); 
    entries.setAdapter(adapter); 
    entries.setOnItemClickListener(mMessageClickedHandler); 
} 

private AdapterView.OnItemClickListener mMessageClickedHandler = new AdapterView.OnItemClickListener() 
{ 
    public void onItemClick(AdapterView parent, View v, int position, long id) 
    { 
     selections(v, (int)id); 
    } 
}; 

public void selections(View view, int id) 
{ 
    if(Counter < 7) 
    { 
     if(selections[0] == id || selections[1] == id || selections[2] == id || selections[3] == id || selections[4] == id || selections[5] == id || selections[6] == id) 
     { 
      MESSAGE.message(db.context, "Diese Auswahl hast du bereits getroffen!"); 
     } 
     else 
     { 
      selections[Counter] = id; 
      view.setBackgroundColor(0xAACCCCCC); 
      Counter++; 
     } 
    } 
    else 
    { 
     MESSAGE.message(db.context, "Du hast die maximal mögliche Anzahl an Auswahl getroffen!"); 
    } 
} 
0

Um Id dynamisch zu jeder Ansicht zu setzen, zuerst eine ID in Ihrer Ressource-Datei definieren:

<resources> 
    <item name="custom_id" type="id" /> 
</resources> 

Dann im Code:

view.setId(R.id.custom_id); 
+0

In einigen Fällen funktioniert diese Lösung, aber in dieser Situation kann ich keine XML-Datei verwenden, um IDs zu generieren, weil ich nicht weiß, wie viele Kontrollkästchen das nächste Mal ich die App ausführen werde. –

Verwandte Themen