我正在編寫一個Android應用程序來列出數據庫中的項目,並將這些項目中的某些標記爲收藏並根據收藏夾更新數據庫。關於在ListView中更改圖像的問題
:
當我標記的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
我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
只需再次加載光標 –