2012-02-16 3 views
0

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

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

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

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

Хорошо, теперь есть значок звезды на первом куске, но не только на этом, но и на некоторые другие предметы. Страница подробностей для этих неправильных помеченных объектов говорит, что это не favorited. Таким образом, проблема не в моих операциях с базой данных. Также я проверил курсор, который показывает отмеченные элементы, и его .getCount() также сказал, что только позиция favorited. Я не могу найти, где есть проблема. Я написал свой упрощенный исходный код для заказа 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

вы пытались что-то вроде?

boolean isMarked = cursor.getInt(cursor.getColumnIndex("marked")) == 1; 
if (isMarked) { 
    imgMark.setVisibility(View.VISIBLE); 
}else{ 
    imgMark.setVisibility(View.GONE); 
} 
+0

Хорошая идея, но не работала :(есть еще не-хотел марок. И в разных пунктах при открытии приложения –

+0

Извините, но я просто понял, почему вы звоните BindView() по методу NewView ? – juanmhidalgo

+0

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

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