0

我有一个 ListView,它通过 CursorAdapter 显示来自数据库的一些结果...标题、文本和一个标志,以指示用户是否已经查看过该项目(通过将它们带到另一个屏幕)...基本上如果数据库“已访问”值为 0 它需要在项目旁边显示一个小的“新”图标...如果不是它不应该显示任何图标...

问题是,当它加载列表时,它似乎随机分配标志......访问过的没有标志,但一些未访问过的也错过了标志......

我尝试在 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;
}


}

我确定数据库中的数据是正确的......提前致谢!

4

1 回答 1

0

试试这个,

在您的以下代码中添加一个 else 块,并在其中将 imageview 设置为不可见/消失。您也可以将 imageresource 设置为 null,但何必呢?

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

但是,将其设置为消失可能会影响您的布局。因此,如果您打算使用 GONE,请处理好。

您可以尝试的另一件事是实现 getView() 而不是 newView() 并实现 ViewHolder 模式。它使它更有效率,据我所知,更不容易出错。

于 2012-07-17T09:19:30.280 回答