根据自定义列表视图中数据库的值更改图像视图源
Change image view source based on the value from database in custom listview
在我的 android 应用程序中,我有一个自定义 listview (ArrayAdapter)
。在它的 getView() 方法中有一个 TextView 和一个 Imageview,ImageView 用于标记和 un-marking favorite 。当应用程序第一次加载时,它会在数据库中检查它的 id 是否在 收藏夹 table 中可用,如果它的图像发生变化,
但我的问题是它被标记为 non-favorite 项目的最爱。我在下面粘贴我的代码
@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)) {
在我的 android 应用程序中,我有一个自定义 listview (ArrayAdapter)
。在它的 getView() 方法中有一个 TextView 和一个 Imageview,ImageView 用于标记和 un-marking favorite 。当应用程序第一次加载时,它会在数据库中检查它的 id 是否在 收藏夹 table 中可用,如果它的图像发生变化,
但我的问题是它被标记为 non-favorite 项目的最爱。我在下面粘贴我的代码
@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)) {