[英]Strange ToggleButton behavior inside ListView
我有一个简单的ListView
,其中包含一些测试项目:
private ArrayList<NearbyRestaurantListItem> getItems() {
ArrayList<NearbyRestaurantListItem> items = new ArrayList<>();
// ..
items.add( new NearbyRestaurantListItem(null, "Item number " , "seven") );
items.add( new NearbyRestaurantListItem(null, "Item number " , "eight") );
items.add( new NearbyRestaurantListItem(null, "Item number " , "nine") );
items.add( new NearbyRestaurantListItem(null, "Item number " , "ten") );
// ..
return items;
}
问题是这些列表项具有可切换的“收藏夹”按钮。 我正在谈论的奇怪行为是,如果我切换一个收藏夹按钮, 另一个列表项中的另一个按钮也会被切换。 看来,按下的第六个切换按钮也被切换了,我不知道为什么。 是因为OnClickListener*
类是static
吗? NearbyRestaurantListItem
会像这样膨胀:
public View getView(int position, View convertView, ViewGroup parent) {
NearbyRestaurantListItemViewHolder holder;
if(convertView == null){
convertView = mInflater.inflate(R.layout.listview_nearbylist_item, parent, false);
holder = new NearbyRestaurantListItemViewHolder();
holder.restaurantThumbnail = (ImageView) convertView.findViewById(R.id.restaurant_thumbnail);
holder.restaurantName = (TextView) convertView.findViewById(R.id.restaurant_name);
holder.restaurantGenre = (TextView) convertView.findViewById(R.id.restaurant_genre);
holder.openingHours = (TextView) convertView.findViewById(R.id.opening_hours);
convertView.setTag(holder);
} else {
holder = (NearbyRestaurantListItemViewHolder) convertView.getTag();
}
holder.restaurantThumbnail.setImageDrawable(null);
holder.restaurantName.setText(items.get(position).getRestaurantName());
holder.restaurantGenre.setText(items.get(position).getRestaurantGenre());
holder.openingHours.setText("08:00 - 18:00 Uhr");
if(holder.restaurantGenre.getText().length() == 0) {
holder.restaurantGenre.setVisibility(View.GONE);
}
ToggleButton favorite = (ToggleButton)convertView.findViewById(R.id.favorite);
favorite.setOnClickListener(new NearbyRestaurantListFragment.OnClickFavoriteButtonListener(activity));
favorite.setTag(convertView);
ImageView map = (ImageView)convertView.findViewById(R.id.map);
map.setOnClickListener(new NearbyRestaurantListFragment.OnClickMapButtonListener(activity));
map.setTag(convertView);
return convertView;
}
我真的很愚蠢地问这个问题,但是我无法在这里找出问题所在。
这里的问题是,在Android ListView
,单个项目行被回收,并且您没有重置“收藏夹”按钮的状态。 您应该将自己喜欢的按钮添加到holder
并适当地更改其状态(或将其重置为未切换)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.