Android基础适配器

时间:2015-07-24 06:19:03

标签: android baseadapter

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

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

我试过

seekbar.setTag(position);

但没有用。

2 个答案:

答案 0 :(得分:1)

最后的解决方法是,我将我的ViewHolder类的对象置于getView()方法内部并将其分配给播放按钮的OnClickListener上的全局ViewHolder类的对象。这个更改解决了我的问题,就像一个奇迹。

答案 1 :(得分:0)

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

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);
        }
    }
}