android - 无法使用 ListView 中的模型和列表项获得正确的值

标签 android listview listitem

我有一个包含多个列表项的 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/

相关文章:

android - 在 Mac 上编译 x264 : "No working C compiler found" and "arm-linux-androideabi-gcc: command not found"

android - 任何适用于土耳其语的 Android TTS api?

android - 无法生成发布构建 apk

Android ListView 选择的背景在 2.3 中不起作用

google-apps-script - Apps 脚本列表项 - 制作项目符号而不是编号?

java - 将毫秒转换为日期时间会给出错误的时间

android - 如何清除ListView中的数据?异步任务

java - 更新 listView 中的一行,每四行更新一次

html - 如何在输入字段下显示列表项?

html - 没有<ol>或<ul>的<li>的语义意义?