Android 根据自定义listview中数据库的值更改图像视图源

Android 根据自定义listview中数据库的值更改图像视图源,android,listview,android-listview,custom-lists,Android,Listview,Android Listview,Custom Lists,在我的android应用程序中,我有一个自定义的listview(ArrayAdapter)。在其getView()方法中有一个TextView和一个Imageview,Imageview用于标记和取消标记收藏夹。当应用程序第一次加载时,它会在数据库中检查其id是否在收藏夹表中可用,如果它在那里,则其图像会发生更改, 但我的问题是,它标记为最喜欢的非最喜欢的项目。我正在下面粘贴我的代码 @Override public View getView(final i

在我的android应用程序中,我有一个自定义的listview
(ArrayAdapter)
。在其getView()方法中有一个TextView和一个Imageview,Imageview用于标记和取消标记收藏夹。当应用程序第一次加载时,它会在数据库中检查其id是否在收藏夹表中可用,如果它在那里,则其图像会发生更改, 但我的问题是,它标记为最喜欢的非最喜欢的项目。我正在下面粘贴我的代码

      @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                View view = convertView;
                if (view == null) {
                    view = getActivity().getLayoutInflater().inflate(R.layout.custom_list_item, parent, false);
                }
                Item item = ItemList.get(position);
                TextView title = (TextView) view.findViewById(R.id.title);

                ImageView favorite = (ImageView) view.findViewById(R.id.favourite_mark_icon);
                if (mHandler.checkForIDMatchForFav(item)) {
                    favorite.setImageResource(R.drawable.fav_marked);
                }
 favorite.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    markFavourite(position, v);
                }
            });

                return view;
            }

非常感谢您的帮助。

由于您正在重用视图,获取参数
convertView
,因此需要在生成新视图之前更改每个视图状态。循环使用允许您基于模板(旧视图)创建新视图,但如果内容是动态的,则应该对其进行更改

只需添加一个else分支,其中收藏夹
ImageView
被设置为默认的未标记图标

if (mHandler.checkForIDMatchForFav(item)) {
    favorite.setImageResource(R.drawable.fav_marked);
}else{
    favorite.setImageResource(R.drawable.not_marked);
}

我注意到这段代码中几乎没有错误。而回收你的代码将被破坏。 试试下面的方法

@Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                View view = convertView;
ViewHolder holder;
                if (view == null) {
holder = new ViewHolder()
                    view = getActivity().getLayoutInflater().inflate(R.layout.custom_list_item, parent, false);
holder .title = (TextView) view.findViewById(R.id.title);

               holder. favorite = (ImageView) view.findViewById(R.id.favourite_mark_icon);
view.setTag(holder);
                }else{
holder = (ViewHolder) view.getTag();
}
                Item item = ItemList.get(position);

                if (mHandler.checkForIDMatchForFav(item)) {
                    holder.favorite.setImageResource(R.drawable.fav_marked);
                }else{
//set here your image 
}
 holder.favorite.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    markFavourite(position, v);
                }
            });

                return view;
            }

class ViewHolder{
TextView title;
ImageView favorite;
}
您必须处理以下情况的else条件

 if (mHandler.checkForIDMatchForFav(item)) {
如果能对你有所帮助,请考虑接受我的回答。