ListView with ArrayAdapter and ViewHolder adding icons to the wrong item

后端 未结 3 818
陌清茗
陌清茗 2020-12-06 07:03

I have a dynamic ListView which uses an ArrayAdapter. When a name is selected from a spinner, the name together with an icon showing whether they a

3条回答
  •  广开言路
    2020-12-06 07:37

    You have to set the icons after if-else-if for creating or binding a holder. Otherwise, the icons would be rightly displayed only in first few items in the list i.e until the ListView is not filled.

    public View getView(int position, View convertView, ViewGroup parent) {
    
        Log.i("ANDY","View getView Called");
        // A ViewHolder keeps references to children views
        // to avoid unneccessary calls to findViewById() on each row.
        ViewHolder holder;
    
            if (null == convertView) {
                Log.i("ANDY","Position not previously used, so inflating");
                convertView = inflater.inflate(R.layout.player_simple_list, null);
    
                // Creates a ViewHolder and store references to
                // the two children views we want to bind data to.
                holder = new ViewHolder();
                holder.text = (TextView) convertView.findViewById(R.id.label);
                holder.icon = (ImageView) convertView.findViewById(R.id.icon);
                convertView.setTag(holder);
            } else {
                // Get the ViewHolder back to get fast access to the TextView
                // and the ImageView.
                holder = (ViewHolder) convertView.getTag();
    
            }
            // Bind the data efficiently with the holder.
            holder.text.setText(getItem(position));
    
            // Change icon depending is the sexmale variable is true or false.
            if (sexmale == true) {
                holder.icon.setImageBitmap(maleicon);
            }
            else {
                holder.icon.setImageBitmap(femaleicon);
            }
            Log.i("ANDY","getCount = "+mAdapter.getCount());
            return convertView;
    }
    

提交回复
热议问题