Я пишу приложение для Android, чтобы перечислить элемент из базы данных, и отметить некоторые из этих элементов в качестве избранного и сохранить обновление базы данных в соответствии с избранным.Проблема с изменением изображения в ListView
My Aim is
:
Когда я отмечаю конкретный элемент ListView в качестве фаворита, образ этого конкретного элемента списка будет изменен и соответствующий столбец таблицы должен быть обновлен в фаворитах (да) или не любимый (нет) ,
Он отлично работал, чтобы перечислить элемент из базы данных, изменить источник изображения в соответствии с избранным, обновить базу данных.
My Problem is
:
1.При нажатии изображение определенного элемента, то изображение будет изменено once
, и соответствующая база данных также будет изменен. Но, Нажав на то же изображение another time
(в последний раз, нажав на картинку) does not change anything
(не меняйте изображение, а не обновляйте).
2. By scrolling the listView keep the listview as before changing the listView
.
Я отношу this link, before
I use database
. Он работал нормально.
После я использую базу данных, я изменил код, как показано ниже:
public class EpisodeCursorAdapter extends SimpleCursorAdapter {
public final String TAG = "EpisodeCursorAdapter";
//private String strurl = "http://timesofindia.feedsportal.com/c/33039/f/533916/index.rss";
public int favourite[];
private Cursor c,temp_cursor;
private Context context;
AABDatabaseManager db;
public EpisodeCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
this.c = c;
temp_cursor=c;
this.context = context;
Log.d(TAG, "Object size is:" +c.getCount());
// favourite = new int[c.getCount()];
// for (int i = 0; i < c.getCount(); i++) {
// favourite[i] = 0;
// }
}
static class EpisodeHolder {
TextView title;
TextView desc;
ImageView thumbnail, favourite;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Log.d(TAG,"NEw view in Cursor adapater"+" "+cursor.getCount());
Cursor cc=getCursor();
Log.d(TAG,"NEw view in Cursor adapater"+" "+cc.getCount()+ " "+cc.getInt(0));
// TODO Auto-generated method stub
return super.newView(context, cursor, parent);
}
public View getView(final int pos, View inView, ViewGroup parent) {
Log.d(TAG,"getView view in Cursor adapater " + pos);
View v = inView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.episode_row_view, null);
final EpisodeHolder holder = new EpisodeHolder();
db = new AABDatabaseManager(context);
holder.title = (TextView) v.findViewById(R.id.title);
holder.desc = (TextView) v.findViewById(R.id.description);
holder.favourite = (ImageView) v.findViewById(R.id.imageView1);
holder.thumbnail = (ImageView) v.findViewById(R.id.image);
v.setTag(holder);
Log.d(TAG, "Row tag is:" + v.getTag());
holder.favourite.setTag(pos);
holder.favourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int posi = (Integer) v.getTag();
//Log.d(TAG, "Cursor total count" + c.getCount() + " position:" + holder.favourite.getTag() + " view position:" + pos + " " + posi);
Log.d(TAG,"****************************** INFO REGARDING CLICKING ON FAVOURITE ************************");
Log.d(TAG,"Position of image clicked : " + posi);
temp_cursor.moveToPosition(posi);
int id = temp_cursor.getInt(temp_cursor.getColumnIndex("_id"));
String markedAsFav = temp_cursor.getString(temp_cursor.getColumnIndex("favourite"));
Log.d(TAG, "Id of clicked item is : " + id + " Favourite : " + markedAsFav);
if(markedAsFav.equalsIgnoreCase("no")) {
Log.d(TAG, "****In favourite onClick*** Was not as favourite... Mark as favourite...");
holder.favourite.setImageResource(R.drawable.ic_favourite_2);
db.updateRowAsFav(id, temp_cursor.getString(temp_cursor.getColumnIndex("favourite")));
} else if(markedAsFav.equalsIgnoreCase("yes")) {
Log.d(TAG, "****In favourite onClick*** Was as favourite... Mark it as not favourite...");
holder.favourite.setImageResource(R.drawable.ic_favourite_1);
db.updateRowAsFav(id, temp_cursor.getString(temp_cursor.getColumnIndex("favourite")));
}
}
});
} else {
((EpisodeHolder) v.getTag()).favourite.setTag(pos);
}
final EpisodeHolder holder = (EpisodeHolder) v.getTag();
this.c.moveToPosition(pos);
String imageUrl = this.c.getString(this.c
.getColumnIndex("table_epi_image"));
String titleStr = this.c.getString(this.c
.getColumnIndex("table_epi_title"));
String descStr = this.c.getString(this.c
.getColumnIndex("table_epi_description"));
if(c.getString(c.getColumnIndex("favourite")).equalsIgnoreCase("yes"))
{
holder.favourite.setImageResource(R.drawable.ic_favourite_2);
}
else
{
holder.favourite.setImageResource(R.drawable.ic_favourite_1);
}
holder.thumbnail.setTag(imageUrl);
new DownloadImagesTask().execute(holder.thumbnail);
//TextView title = (TextView) v.findViewById(R.id.title);
holder.title.setText(titleStr);
//TextView desc = (TextView) v.findViewById(R.id.description);
holder.desc.setText(descStr);
return (v);
}
}
Я знаю, что я что-то отсутствует. Но я не мог понять, что это.
Пожалуйста, помогите мне решить эту проблему.
Спасибо вам заранее!
здесь temporory coursor такое же, как и при он был передан конструктору, поэтому обновленная ссылка недоступна курсору, и она перейдет к значению no/yes, которое было ранее неактивным, вам придется обновить курсор новым значение –
Спасибо. Как его решить? – Dhasneem
просто загрузите курсор снова –