所以我确实有我的自定义ListView
与TextView
在左侧和ImageView
在右侧。它显示可以检查喜爱的产品。所以当产品最喜欢它时,它会显示光明星,当它不显示时,它会显示黑暗的星星。自定义列表视图,第一行是不正确的
Everthing很好地期待第一行。当第一行被选为收藏夹时,一切正常。但是当它被选择为不喜欢的时候,当任何其他产品也有亮星时它仍然有一颗亮星。为了将第一个星星颜色设置为黑暗,我需要将所有产品设置为不喜欢的。
我试图调试它,但我的日志显示,一切都很好......我无法找到任何合理的答案为什么发生在我身上,所以我来到这里。我发布了一些代码。
适配器
public class ProductsWithFavAdapter extends ArrayAdapter<Products>{
private Activity context;
private List<Products> products;
public ProductsWithFavAdapter(Activity context, List<Products> products) {
super(context, R.layout.product_with_fav, products);
this.context = context;
this.products = products;
}
private class ViewHolder {
public TextView productName;
public ImageView imageFav;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
View rowView = convertView;
if(rowView == null) {
LayoutInflater layoutInflater = context.getLayoutInflater();
rowView = layoutInflater.inflate(R.layout.product_with_fav, null, true);
viewHolder = new ViewHolder();
viewHolder.productName = (TextView) rowView.findViewById(R.id.textView1);
viewHolder.imageFav = (ImageView) rowView.findViewById(R.id.imageView2);
rowView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) rowView.getTag();
}
Products product = products.get(position);
if(product.isFav()) {
viewHolder.imageFav.setImageResource(R.drawable.fav_light);
Log.d("AdaptFAV " + Integer.toString(position) + " " + product.getName(), Integer.toString(product.isFav() ? 1 : 0) + " SET LIGHT");
} else {
viewHolder.imageFav.setBackgroundResource(R.drawable.fav_dark);
Log.d("AdaptFAV " + Integer.toString(position) + " " + product.getName(), Integer.toString(product.isFav() ? 1 : 0) + " SET DARK");
}
viewHolder.productName.setText(product.getName());
return rowView;
}
活动
products.clear();
favProductsTriggered = !favProductsTriggered;
String searchProductText = searchProduct.getText().toString();
boolean searchingProduct = false;
if(!searchProductText.equals("") && !searchProductText.isEmpty()) {
searchingProduct = true;
}
ProductsDbAdapter adapterProducts = new ProductsDbAdapter(getActivity());
adapterProducts.open();
final Cursor cursorProducts = adapterProducts.getAllProducts();
if(cursorProducts != null && cursorProducts.moveToFirst()) {
do {
int id = cursorProducts.getInt(ProductsDbAdapter.ID_COLUMN);
String name = cursorProducts.getString(ProductsDbAdapter.NAME_COLUMN);
boolean fav = cursorProducts.getInt(2) != 0;
products.add(new Products(id, name, 0, 0, fav));
Log.d("wwFAV " + Integer.toString(cursorProducts.getPosition()), Integer.toString(cursorProducts.getInt(2)));
} while(cursorProducts.moveToNext());
}
ProductsWithFavAdapter listProductsAdapter = new ProductsWithFavAdapter(getActivity(), products);
lvProducts = (ListView) ll.findViewById(R.id.listView3);
lvProducts.setAdapter(listProductsAdapter);
,现在来看,日志。当他们显示:
AdaptFAV 0 bułka pszenna: 0 SET DARK
AdaptFAV 1 płatki owsiane: 1 SET LIGHT
AdaptFAV 2 bułka jęczmienna: 1 SET LIGHT
然后第一个位置仍然是LIGHT,因为第二个和第三个是。我需要设置第二个,黑暗到黑暗,以设置第一个黑暗。 :(
提供活动和适配器的全部代码,因为我不能够看到onClickListener的最爱/ Unfav –
解决了下面的回答,谢谢无论如何! – Tomek