私のAndroidアプリケーションの一部にはListView
、テーブルにエントリのリストを表示するがあります。ユーザーがアイテムをタップすると、このアイテムListView
の新しいIntent
アイテムが表示されます。
新しいインテントでは、ユーザーはこのエントリに対して、読み取り、編集、お気に入り(および項目が既にお気に入りに登録されている場合はお気に入りの削除) などの操作を実行できます。詳細インテントでは、テーブル内のエントリの「マーク」列を、お気に入りの場合は1に、お気に入りでない場合は0に変更します。
それは正常に動作します。しかし、問題は私のマスターにありListView
ます。にカスタムを設定しCursorAdapter
ましたListView
。ImageView
エントリがお気に入りかどうかを示す天気を追加したかったのです。ListView
私のアイテムのレイアウトファイルで、ImageView
これに を追加し、 に設定しましvisibility
たGONE
。
お気に入りのアイテムを検出し、その星ImageView
visibility
を に設定したいVISIBLE
。次に、デバイスでアプリケーションを実行しました。いつものように、どのエントリもお気に入りに登録されていません。ListView
次に、開いたこのアイテムの詳細ページの最初のアイテムをタップします。私はそれをお気に入りにして、リストに戻りました。
さて、こぶしのアイテムに星のアイコンがありますが、これだけでなく他のアイテムにもあります。これらの間違ったスター付きアイテムの詳細ページには、お気に入りに追加されていないと表示されます。したがって、問題はデータベース操作にはありません。また、マークされたアイテムを表示するカーソルを確認しましたが、お気に入りのアイテムは1つ.getCount()
だけであるとも言われました。どこに問題があるのか わかりません。カスタムベローズの簡略化されたソースコードを作成しました。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;
}
}