我有一个简单的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;
}
事情是这些列表项目有一个可切换的&#34;最喜欢的&#34;按钮。我所说的奇怪的行为是,如果我切换一个喜欢的按钮,另一个另一个列表项的按钮也会被切换。似乎按下的第6个切换按钮也会切换,我不知道为什么。是因为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;
}
我真的觉得这很愚蠢,但我不能在这里找出问题。
答案 0 :(得分:0)
这里的问题是,在Android ListView
中,单个项目行正在被回收,并且您没有重置收藏夹按钮的状态。您应该将您喜欢的按钮添加到holder
并适当地更改其状态(或将其重置为未加帽状态)。
答案 1 :(得分:0)
我在this post中实现了类似的功能。看看,这就是你需要的。