0

CursorAdapter を介して DB からの結果を表示する ListView があります...タイトル、テキスト、およびユーザーがそのアイテムを既に表示しているかどうかを示すフラグ (別の画面に移動することによって)...基本的に DB が「訪問済み」の値が 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;
}


}

DBのデータは正しいと確信しています...よろしくお願いします!

4

1 に答える 1

0

これを試して、

次のコードにelseブロックを追加し、その中でイメージビューを非表示/非表示に設定します。imageresource を null に設定することもできますが、わざわざする必要はありません。

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

ただし、going に設定すると、レイアウトに影響を与える可能性があります。GONEを使用する予定がある場合は、それを処理してください。

他に試すことができるのは、newView() の代わりに getView() を実装し、ViewHolder パターンを実装することです。これにより、効率が向上し、私の知る限り、エラーが発生しにくくなります。

于 2012-07-17T09:19:30.280 に答える