Android 基础适配器

Android Base Adapter

我正在向 ListView 动态添加多个 UI 元素,例如 SeekBarImageViewTextView。但是每当我尝试获取参考时对于这些元素,我总是只引用最后一个元素。

例如我有多个 SeekBar。当我按下播放按钮时 SeekBar 应该 update.But 问题是当我只按下任意数量的播放按钮 SeekBar最后一个位置正在更新。

我试过了

seekbar.setTag(position);

但是没有用。

您设置的标签应该是您的 ViewHolder class 的实例。 你的代码可以是这样的 -

public class YourTeamAdapter extends BaseAdapter {
    private static Context context;
    private ArrayList<TopDataModel> mList;


    public YourTeamAdapter(Context c, ArrayList<TopDataModel> list) {
        mList = list;
        context = c;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    // get item at givin position
    @Override
    public TopDataModel getItem(int position) {
        return mList.get(position);
    }

    // get itemID at givin position
    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder = null;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.activity_team_status_list_item, null, true);
            holder = new Holder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (Holder) convertView.getTag();
        }

        holder.tvName.setText(getItem(position).getName());
        holder.tvRank.setText(getItem(position).getRank());
        try {
            if (getItem(position).getImage() != null &&
                    !getItem(position).getImage().equalsIgnoreCase("")) {
                holder.imageView.setImageBitmap(SharedHelper.decodeBase64(getItem(position).getImage()));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return convertView;

    }

    private static class Holder {
        TextView tvName;
        TextView tvRank;
        CircularImageView imageView;

        public Holder(View convertView) {
            this.tvName = (TextView) convertView.findViewById(R.id.name);
            this.tvRank = (TextView) convertView.findViewById(R.id.rank);
            this.imageView = (CircularImageView) convertView.findViewById(R.id.image);
        }
    }
}

最后的解决方案是,我在 getView() 方法中将我的 ViewHolder class 对象设为本地对象,并将其分配给播放按钮 [=12= 上的全局 ViewHolder class 对象] 改变奇迹般地解决了我的问题。