我有一個列表視圖,其中有一個名稱和imageview爲最喜歡的按鈕圖標,當我點擊最喜歡的圖標圖標更改爲填充從未填充但當我滾動列表視圖圖標更改從填充未填充的,這是我的代碼listview最喜歡的圖標得到改變,而滾動列表視圖
public class AdapterFind extends BaseAdapter {
ArrayList<BeanFindName> arrayListAd; /* arraylist with model class */
Activity activity;
DBFavourite dbfav; /* database class */
private boolean[] favorites; `ADDED`
public AdapterFind(ArrayList<BeanFindName> arrayListAd, Activity activity) {
this.arrayListAd = arrayListAd;
this.activity = activity;
dbfav = new DBFavourite(activity);
favorites = new boolean[this.arrayListAd.size()]; `ADDED`
}
@Override
public int getCount() {
return arrayListAd.size();
}
@Override
public Object getItem(int position) {
return arrayListAd.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
private class ViewHolder {
TextView txtID;
TextView txtName;
ImageView imvFavourite;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater inflater = activity.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.activity_customized_listview, null); /* layout file for listview row items */
holder = new ViewHolder();
holder.txtID = (TextView) convertView
.findViewById(R.id.customized_listview_tv_textId); /* textview id */
holder.txtName = (TextView) convertView
.findViewById(R.id.customized_listview_lv_names); /* texview for names */
holder.imvFavourite = (ImageView) convertView
.findViewById(R.id.customized_listview_imv_favourite); /* imageview for favorite icons */
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtID.setText(String.valueOf(arrayListAd.get(position).getNameId())); /* model class functions */
holder.txtName.setText(arrayListAd.get(position).getName()); /* model class functions */
if (arrayListAd.get(position).getFinfavId() > 0 || favorites[position]) {
holder.imvFavourite.setImageResource(R.mipmap.customized_listview_iv_favourites_boy_filled);
} else if (arrayListAd.get(position).getFinfavId() == 0 || !favorites[position]) {
holder.imvFavourite.setImageResource(R.mipmap.customized_listview_iv_favourites_boy_not_filled);
}
holder.imvFavourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
`ADDED`
if (favorites[position] || arrayListAd.get(position).getFinfavId() > 0) { /* check for scrolling and database also to change favorite icon */
holder.imvFavourite.setImageResource(R.mipmap.customized_listview_iv_favourites_boy_not_filled);
dbfav.deleteByID(holder.txtID.getText().toString()); /* delete records from database*/
favorites[position] = false;
} else if (arrayListAd.get(position).getFinfavId() == 0 || !favorites[position]) { holder.imvFavourite.setImageResource(R.mipmap.customized_listview_iv_favourites_boy_filled);
dbfav.insertDataInFavourite(holder.txtID.getText().toString()); /*inserts records to database */
favorites[position] = true;
}
}
});
return convertView;
}
}
這將工作,但將是非常低效的。 – Shubham
根據您的代碼,您嘗試將圖像圖標設置爲視圖持有者,這在綁定發生時不起作用。因爲你的數據集沒有更新並且仍然有舊值。順便提一下,notifyDataSetInvalidated不會導致您認爲的效率低下。它只是在可見區域刷新您的視野。 – albeee