Android 基础适配器
Android Base Adapter
我正在向 ListView
动态添加多个 UI 元素,例如 SeekBar
、ImageView
、TextView
。但是每当我尝试获取参考时对于这些元素,我总是只引用最后一个元素。
例如我有多个 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 对象] 改变奇迹般地解决了我的问题。
我正在向 ListView
动态添加多个 UI 元素,例如 SeekBar
、ImageView
、TextView
。但是每当我尝试获取参考时对于这些元素,我总是只引用最后一个元素。
例如我有多个 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 对象] 改变奇迹般地解决了我的问题。