ListView中的奇怪ToggleButton行为

时间:2015-04-19 19:00:37

标签: android

我有一个简单的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;
}

我真的觉得这很愚蠢,但我不能在这里找出问题。

2 个答案:

答案 0 :(得分:0)

这里的问题是,在Android ListView中,单个项目行正在被回收,并且您没有重置收藏夹按钮的状态。您应该将您喜欢的按钮添加到holder并适当地更改其状态(或将其重置为未加帽状态)。

答案 1 :(得分:0)

我在this post中实现了类似的功能。看看,这就是你需要的。