2016-07-31 2 views
0

Я работаю над небольшим приложением, которое помогает мне отслеживать мое питание. Теперь я строю макет с адаптером. Для этой цели я использую SimpleCursorAdapter, потому что все необходимые данные поступают из моей базы данных. Все прошло отлично, за исключением одного вещь:Как установить ID на программно созданные флажки?

Все флажки имеют одинаковый идентификатор. Поэтому я не могу проверить каждый из них. Есть одно решение, которое я знаю, как его можно решить, но в этом случае я не могу использовать xml-файл для генерации идентификаторов, потому что я не знаю, сколько флажков будет в следующий раз при запуске приложения.

Вот мой код:

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); 
} 

И это мой макет:

<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" 
    /> 

Я действительно пытаюсь понять, как я могу решить эту проблему, но я не могу даже представить себе какие возможности у меня есть.

+0

Вы можете просто вызвать 'setId' в свой вид' CheckBox' с любым значением целого числа. Вы делаете это только сейчас? – Shaishav

+0

http://stackoverflow.com/questions/5939392/android-checkable-listview и другие ресурсы доступны из поиска Google в 'android listview checkable' или' android listview checkbox'. – CommonsWare

ответ

0

Проблема решена. Я больше не использую флажки. Вместо этого я использую записи, которые у меня уже есть, и работаю с setOnItemClickListener и создаю новую функцию для обработки выбранных. Новый код:

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

Для того, чтобы установить Id динамически любой точки зрения, сначала необходимо определить идентификатор в файле ресурсов:

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

Затем в коде:

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

В некоторых случаях это решение работает, но в этой ситуации я не могу использовать xml-файл для создания идентификаторов, потому что я не знаю, сколько флажков будет в следующий раз, когда я запустим приложение. –

Смежные вопросы