You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fragment中编辑ListView对象:如何从Bundle获取Student实例实现编辑功能

解决方案

一、先修正现有代码的基础错误

你的代码里存在几处命名、参数不匹配的问题,先调整避免运行报错:

  • 实体类命名统一:将你现在的City类名改为Student,和后续逻辑的类名对齐
  • 修正实体类构造函数:构造函数中this.Sname=name;改为this.Sname = Sname;,不存在name参数
  • 修正国籍setter方法:public void nationality(String nationality)改为public void setNationality(String nationality)
  • 修正Fragment中变量拼写:private EditText nationlaity;改为private EditText nationality;
  • 修正回调接口参数:void onOkPressed(City newCity);改为void onOkPressed(Student student);

二、从Bundle中取出Student对象并实现编辑逻辑

修改AddStudentFragment的onCreateDialog方法,新增判断是否有传入的Student对象,区分新增/编辑模式:

@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    //Inflate the layout for this fragment
    View view= LayoutInflater.from(getActivity()).inflate(R.layout.add_city_fragment_layout,null);
    sName=view.findViewById(R.id.student_name_editText);
    nationality=view.findViewById(R.id.nationality_editText);
    AlertDialog.Builder builder=new AlertDialog.Builder(getContext());

    // 新增:从Bundle取出Student对象,区分模式
    Bundle args = getArguments();
    Student editStudent = null;
    if (args != null && args.containsKey("student")) {
        editStudent = (Student) args.getSerializable("student");
        // 编辑模式:填充原有数据到输入框,修改弹窗标题
        sName.setText(editStudent.getSname());
        nationality.setText(editStudent.getNationality());
        builder.setTitle("编辑学生信息");
    } else {
        builder.setTitle("添加学生");
    }

    final Student finalEditStudent = editStudent;
    return builder
            .setView(view)
            .setNegativeButton("Cancel",null)
            .setPositiveButton("OK",new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialogInterface,int i){
                    String newName=sName.getText().toString();
                    String newNationality=nationality.getText().toString();
                    if (finalEditStudent != null) {
                        // 编辑模式:修改原有对象的属性
                        finalEditStudent.setName(newName);
                        finalEditStudent.setNationality(newNationality);
                        listener.onOkPressed(finalEditStudent);
                    } else {
                        // 新增模式:创建新对象
                        listener.onOkPressed(new Student(newName,newNationality));
                    }
                }
            }).create();
}

三、Activity端适配逻辑

  • 新增场景:点击添加按钮时,调用AddStudentFragment.newInstance(null)弹出弹窗,回调方法中把返回的Student对象添加到列表数据源,调用Adapter的notifyDataSetChanged()刷新列表
  • 编辑场景:给ListView设置OnItemClickListener,点击条目时记录选中的Student对象/对应下标,调用AddStudentFragment.newInstance(选中的Student对象)弹出弹窗,回调方法中更新对应下标的数据源,刷新列表即可

内容的提问来源于stack exchange,提问作者Julian Schmitt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:09:04