Итак, у меня есть свой пользовательский ListView
с TextView
слева и ImageView
с правой стороны. Он показывает продукты, которые можно проверить любимым. Поэтому, когда продукт является любимым, он показывает световую звезду, и когда он не показывает темную звезду.Custom Listview, первый ряд неверен
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
затем первая позиция все еще СВЕТ, потому что вторая и третья. Мне нужно установить второй и темный, чтобы установить темную темноту. :(
обеспечивают полный код активности и адаптер, потому что я не в состоянии видеть onClickListener для избр/Unfav –
решена ниже ответ, спасибо так или иначе! – Tomek