リストビューには名前のテキストビューがあり、お気に入りのアイコンの画像ビューはクリックしたときにアイコンアイコンが塗りつぶされないように変更されましたが、あなたがする必要があるこれは私のコードリストビューお気に入りのアイコンがスクロール中に変更されました
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