Пользовательский ListView из SQLite Cursor

В моем списке содержатся элементы с именем и статусом. Имя - это String а статус - int. Я хочу иметь ListView где каждый элемент показывает имя и раскрывающийся список для выбора статуса. Кроме того, цвет фона будет меняться в зависимости от состояния int.

У меня есть курсор:

String[] ItemsData= { "id", "name", "status" };

Cursor ItemsCursor = ItemsDatabase.query(
 Database.ITEMS_TABLE, ItemsData, null, null, null, null, null
);

ItemsCursor.moveToFirst();

и я создал список (программно, как я должен это делать):

ListView ItemsListView = new ListView(this);

Теперь я знаю, что я могу использовать и Adapter (например, SimpleCursorAdapter), но я не знаю, как это сделать, принимая во внимание, что это name является String внутри TextView а статус - Spinner с предопределенными значениями, сохраненными как int in база данных со значением по умолчанию, которое соответствует статусу. Кроме того, статус также меняет цвет фона.

Возможно, я не могу использовать Adapter. Кроме того, я не знаю, как включить Spinner внутри каждого элемента списка, если это возможно.

2 ответа

Вот как я это делаю:

listV = (ListView) findViewById(R.id.viewTest);
ArrayList<hashmap<string, string="">> listItem = new ArrayList<hashmap<string, string="">>();

int i = 1;
String value = null;
HashMap<string, string=""> map;
while ((value = database.getStuff(i)) != null) {
 map = new HashMap<string, string="">();
 map.put("title", value);
 map.put("desc", "RANDOM TEXT");
 map.put("img", String.valueOf(R.drawable.images));
 listItem.add(map);
 i++;
 }

 SimpleAdapter s = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.list_content,
 new String[] {"img", "title", "desc"}, new int[] {R.id.img, R.id.stuff, R.id.stuff});
 listV.setAdapter(s);
</string,></string,></hashmap<string,></hashmap<string,>

И вот где я имею дело с курсорами:

public String getStuff(int id) {
 Cursor c = db.rawQuery("SELECT value FROM test WHERE _id = " +id, null);
 return cursorToString(c);
}

private String cursorToString(Cursor c) {
 if (c.getCount() == 0)
 return null;
 c.moveToFirst();
 String s = c.getString(0);
 c.close();
 return s;
}

"R.layout.list_content" - это.xml файл, используемый для настройки формы каждого элемента вашего списка, вы можете добавлять изображения TextView и все остальное, что хотите!

Просто скажите мне, хотите ли вы больше информации о файле.xml


Вы можете использовать CursorAdapter для создания строк из любого макета, который вы хотите.

public class CustomAdapter extends CursorAdapter {

 public CustomAdapter(Context context, Cursor c) {
 super(context, c, false);
 }

 @Override
 public View newView(Context context, Cursor cursor, ViewGroup parent) {
 return LayoutInflater.from(context).inflate(R.layout.row, parent, false);
 }

 @Override
 public void bindView(View view, Context context, Cursor cursor) {
 // Populate view with the cursor, add listeners...
 }
}

licensed under cc by-sa 3.0 with attribution.