qq_34242806
qq_34242806
采纳率0%
2017-03-06 12:26

Android新手急求:ListView点击删除按钮时,总是最后一个item被删除

如题,我的ListView的每个item都有一个删除按钮,但是每次点击按钮后都是删除了最后一个item。

   调试后position是正确的,索引是没有问题的,每次删除的都是正确的位置,而且每次item一删除就调用notifyDataSetChanged()去刷新,这个问题困扰好几天了…麻烦大神帮帮忙。

        另外我这个MyAdapter类是写在MainActivity类里面的,我是有添加到arr里的,纯粹是为了方便……我不知道是不是这个引起的问题。

        public class MyAdapter  extends BaseAdapter {
    private Context context;
    private LayoutInflater inflater;
    public ArrayList<String> arr;
    public MyAdapter(Context context) {
        super();
        this.context = context;
        inflater = LayoutInflater.from(context);
        arr = new ArrayList<String>();
    }
    @Override
    public int getCount() {
        return arr.size();
    }
    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }
    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup arg2) {
        // TODO Auto-generated method stub
        ViewHolder viewHolder = null;
        if(convertView == null){
            viewHolder = new ViewHolder();
            convertView = inflater.inflate(R.layout.mission_item, null);

            viewHolder.mission_name = (TextView) convertView.findViewById(R.id.pro_name);
            viewHolder.mission_add = (TextView) convertView.findViewById(R.id.pro_add);
            viewHolder.mission_phone = (TextView) convertView.findViewById(R.id.pro_phone);
            viewHolder.del = (Button) convertView.findViewById(R.id.del);
            SharedPreferences shared_mission = getSharedPreferences("mission",
                    Activity.MODE_PRIVATE);
            viewHolder.mission_name.setText(shared_mission.getString("name", ""));
            viewHolder.mission_add.setText(shared_mission.getString("address", ""));
            viewHolder.mission_phone.setText(shared_mission.getString("phone", ""));
            convertView.setTag(viewHolder);
        }else
        {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.del.setTag(position);
        viewHolder.del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                arr.remove(position);
                mission_adapter.notifyDataSetChanged();
            }
        });
        listview.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2,
                                    long arg3) {             
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, MissionInfo.class);
                startActivity(intent);
            }
        });
        return convertView;
    }
     class ViewHolder
    {
        //任务界面
        TextView mission_name,mission_add,mission_phone;
        Button del;
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • caozhy 从今以后生命中的每一秒都属于我爱的人 4年前

    调试position传的值正确么

    点赞 1 评论 复制链接分享
  • qq_32182845 LinWill_ZXH 4年前

    写个内部类。

     class DelOnClickListener implements OnClickListener{
     int position;
     public DelOnClickListener(int position){
     this.position=position;
     }
                            @Override
                public void onClick(View v) {
                    arr.remove(position);
                    mission_adapter.notifyDataSetChanged();
                }
     }
    

    setonclick改下
    viewHolder.del.setOnClickListener(new DelOnClickListener(position));

    点赞 评论 复制链接分享
  • jinjin10086 GJianAJ 4年前

    arr直接放在Activity或者构造器传进来,估计是数据源出问题了 没有完整代码也看不出什么

    点赞 评论 复制链接分享
  • qq_33700351 纯洁小码农_z 4年前

    你的arr这个集合不要在MyAdapter构造函数里NEW出来,你在MyAdapter构造函数里传进一个集合进来,在赋值给arr,我猜测是数据源问题

    点赞 评论 复制链接分享
  • qq_34242806 qq_34242806 4年前

    position是正确的

    点赞 评论 复制链接分享
  • dongfeng9ge 东风玖哥 4年前

    position错了吧

    点赞 评论 复制链接分享