Android-приложение, условный текст в ListView - PullRequest
1 голос
/ 22 апреля 2011

У меня есть представление списка, которое заполняется из базы данных SQLite с помощью SimpleCursorAdapter.Один из столбцов, возвращаемых в курсоре, представляет собой целочисленное значение 0 или 1. В моем представлении списка я хотел бы отобразить это в более удобной форме (например, «Да» или «Нет») и, возможно, с другими цветами текста.для каждого.Вот мой источник:

Cursor c = dbHelper.fetchAllItems();
startManagingCursor(c);

String[] from = {"deployed", "designation", "serial"};
int[] to = {R.id.deployed, R.id.designation, R.id.serial};

setListAdapter(new SimpleCursorAdapter(this, R.layout.list_item, c, from, to));

Как бы я условно переключал элементы и / или свойства в макете, когда SimpleCursorAdapter просто отображает каждое представление на имя столбца.(Можно ли предположить, что я не могу использовать SimpleCursorAdapter для этого?)

1 Ответ

3 голосов
/ 24 апреля 2011

Решено добавлением пользовательского адаптера, расширяющего CursorAdapter

Модификация:

Cursor c = dbHelper.fetchAllItems();
startManagingCursor(c);

setListAdapter(new RowAdapter(this, c));

Новый вложенный класс:

private static class RowAdapter extends CursorAdapter {

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

    public void bindView(View view, Context context, Cursor c) {
        TextView vDesignation = (TextView) view.findViewById(R.id.designation);
        TextView vSerial = (TextView) view.findViewById(R.id.serial);
        TextView vDeployed = (TextView) view.findViewById(R.id.deployed);

        String designation = c.getString(c.getColumnIndexOrThrow("designation"));
        String serial = c.getString(c.getColumnIndexOrThrow("serial"));
        int deployed = c.getInt(c.getColumnIndexOrThrow("deployed"));

        vDesignation.setText(designation);
        vSerial.setText(serial);
        vDeployed.setText(deployed > 0 ? R.string.yes : R.string.no);
        vDeployed.setTextColor(deployed > 0 ? view.getResources().getColor(R.color.yes) : view.getResources().getColor(R.color.no));
    }

    public View newView(Context context, Cursor c, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.list_item, parent, false);
        bindView(view, context, c);
        return view;
    }
}
...