我正在向SeekBar
动态添加多个UI元素,例如ImageView
,TextView
,ListView
。但每当我尝试获取对这些元素的引用时,我就是总是只引用最后一个元素。
例如,我有多个SeekBar
。当我按下SeekBar
应该更新的播放按钮时。问题是当我按下任意数量的播放按钮时,只有SeekBar
在最后位置更新。
我试过
seekbar.setTag(position);
但没有用。
答案 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);
}
}
}