我有一个包含多个列表项的 ListView 。每个列表项都有一个编辑或删除按钮,但问题是当我单击任何列表项的编辑或删除按钮时,它会获取最后一个列表项的 ID 或数据。例如:我有 3 个项目,比如 id 102、104、105,如果我想编辑 id 102 的数据,那么它会获取最后一个项目的数据并更新它。我不明白为什么它不能正常工作。适配器代码
//代码
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public int getItemViewType(int position) {
return position;
}
public int getViewTypeCount() {
return 1;
}
@Override
public int getCount() {
return this.addressModelList.size();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
final View result;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(R.layout.item_show_all_address, parent, false);
viewHolder.txtUserName = (TextView) convertView.findViewById(R.id.userName);
viewHolder.txtUser_phone =(TextView) convertView.findViewById(R.id.user_phone);
viewHolder.txtLocation = (TextView) convertView.findViewById(R.id.location);
viewHolder.txt_edit_address = (TextView) convertView.findViewById(R.id.txt_edit_address);
viewHolder.txt_deleteAddress = (TextView) convertView.findViewById(R.id.txt_deleteAddress);
sp = mContext.getSharedPreferences(SHARED_PREF, MODE_PRIVATE);
addressModel = addressModelList.get(position);
viewHolder.txtUserName.setText(sp.getString("firstName",null)+" "+sp.getString("lastName",null));
viewHolder.txtUser_phone.setText(addressModel.getAddPhoneNumber() + "#" +addressModel.getAddressId()+"*" +position);
viewHolder.txtLocation.setText(addressModel.getAddLocation());
viewHolder.txt_edit_address.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("TAG", "editAddress: "+addressModel.getAddressId() +"**" +position);
showAllAddresses.editAddress(addressModel.getAddressId(),addressModel.getAddLocation(),addressModel.getAddPhoneNumber());
}
});
viewHolder.txt_deleteAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showAllAddresses.deleteAddress(addressModel.getAddressId());
}
});
result = convertView;
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
result = convertView;
}
// lastPosition = position;
return convertView;
}
}
在编辑或删除监听器时,首先获取正确的 ID,然后获取最后一个 ID 的值。 请帮忙
最佳答案
在 OnClickListener 中获取 addressModel
viewHolder.txt_edit_address.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addressModel = addressModelList.get(position);
Log.e("TAG", "editAddress: "+addressModel.getAddressId() +"**" +position);
showAllAddresses.editAddress(addressModel.getAddressId(),addressModel.getAddLocation(),addressModel.getAddPhoneNumber());
}
});
viewHolder.txt_deleteAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addressModel = addressModelList.get(position);
showAllAddresses.deleteAddress(addressModel.getAddressId());
}
});
关于android - 无法使用 ListView 中的模型和列表项获得正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42664011/