2012-07-17 3 views
0

У меня есть ListView, который отображает некоторые результаты из БД через CursorAdapter ... Название, текст и флаг, чтобы указать, просмотрел ли пользователь этот элемент (путем их другой экран) ... В принципе, если значение «посещенного» БД равно 0, ему необходимо отобразить маленький «новый» значок рядом с элементом ... Если нет, он не должен показывать значок ...Android - Исходный код ImageView в ListView

Проблема заключается в том, что когда он загружает список, он присваивает флаг, казалось бы, случайным образом ... У посещаемых нет флага, но некоторые невидимые тоже пропускают флаг ...

Я попытался переместить «посещенная» проверка между BindView и NewView, но я получаю те же результаты ...

Мой адаптер:

public class newsAdapter extends CursorAdapter{ 

public newsAdapter(Context context, Cursor cursor){ 

    super(context, cursor); 

} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 

    TextView title = (TextView) view.findViewById(R.id.newsItemTitle); 
    TextView text = (TextView) view.findViewById(R.id.newsItemText); 

    ImageView newflag = (ImageView) view.findViewById(R.id.newsNewFlag); 
    if(cursor.getInt(cursor.getColumnIndex("visited")) == 0){ 
     Log.i("extra","Not visited yet"); 
     newflag.setImageResource(R.drawable.icon_new); 
    } 

    title.setText(cursor.getString(cursor.getColumnIndex("title"))); 
    text.setText(cursor.getString(cursor.getColumnIndex("text"))); iv); 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    View view = inflater.inflate(R.layout.news_item, parent, false); 

    return view; 
} 


} 

Я уверен, что данные правильны в БД ... Спасибо заранее!

ответ

0

Попробуйте это,

добавить блок еще в свой следующий код и в нем либо установить ImageView Невидимый/ушел. Вы также можете установить источник imageresource равным нулю, но зачем беспокоиться?

if(cursor.getInt(cursor.getColumnIndex("visited")) == 0){ 
     Log.i("extra","Not visited yet"); 
     newflag.setImageResource(R.drawable.icon_new); 
    } 

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

Другая вещь, которую вы можете попробовать - это реализовать getView() вместо newView() и реализовать шаблон ViewHolder. Это делает его более эффективным и, насколько мне известно, менее подверженным ошибкам.

+0

Нет, ничего не изменилось ... – user1504495

+0

У вас есть overrideen getView()? – Shubhayu

+0

Нет, у меня нет, с чем мне его переопределить? – user1504495

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