ListView с пользовательским CursorAdapter не работает хорошо - PullRequest
0 голосов
/ 16 февраля 2012

В части моего приложения для Android у меня есть ListView, который показывает список записей в таблице. Когда пользователь нажимает на элемент ListView, отображается новый Intent для этого элемента.

В новом намерении пользователь может выполнить некоторые операции над этой записью, например , чтение , , редактирование , , добавление , исключение , когда элемент уже в фаворе). В подробном намерении я изменяю «помеченный» столбец записи в ее таблице на 1 , когда он предпочтителен и на 0 , когда избранен .

Работает нормально. Но проблема в моем мастере ListView. Я установил пользовательский CursorAdapter для моего ListView. Я хотел добавить ImageView, который указывает, будет ли запись добавлена ​​ или нет. В файле макета моего элемента ListView я добавил для этого ImageView и установил для visibility значение GONE.

Я хочу обнаружить избранный элемент и установить его звезду ImageView visibility на VISIBLE. Затем я запустил приложение в моем устройстве. Как обычно, ни одна из записей не является предпочтительной. Затем нажмите на первый элемент на ListView и откроется страница сведений об этом элементе. Я одобрил это и вернулся к списку.

Хорошо, теперь на первом элементе есть значок звездочки, но не только на этом, но и на некоторых других. На странице сведений об этих неправильно отмеченных элементах написано, что это не избранный . Так что проблема не в моей работе с базой данных. Также я проверил курсор, который показывает отмеченные элементы, и его .getCount() также сказал, что только 1 item предпочтителен . Я не могу найти, где есть проблема. Я написал свой упрощенный исходный код для пользовательских CursorAdapter ниже:

public class HereIsMyAdapter extends CursorAdapter {

    private final LayoutInflater mInflater;

    public HereIsMyAdapter(Context context, Cursor cursor) {
        super(context, cursor, true);
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView txtTestText = (TextView) view.findViewById(R.id.txtTestText);
        ImageView imgMark = (ImageView) view.findViewById(R.id.imgMark);

        txtSureAz.setText(cursor.getString(cursor.getColumnIndex("azname")));

        boolean isMarked = cursor.getInt(cursor.getColumnIndex("marked")) == 1 ? true : false;

        if (isMarked) {
            imgMark.setVisibility(0);
        }

    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View view = mInflater.inflate(R.layout.my_list_item, parent, false);
        bindView(view, context, cursor);
        return view;
    }

}

1 Ответ

1 голос
/ 16 февраля 2012

ты пробовал с чем-то вроде?

boolean isMarked = cursor.getInt(cursor.getColumnIndex("marked")) == 1;
if (isMarked) {
    imgMark.setVisibility(View.VISIBLE);
}else{
    imgMark.setVisibility(View.GONE);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...