编辑片段中的列表视图对象

Posted

技术标签:

【中文标题】编辑片段中的列表视图对象【英文标题】:Editing listview objects in fragments 【发布时间】:2021-11-16 08:50:29 【问题描述】:

我开始使用 android studio,我正在尝试创建一个学生列表和他们各自的国籍,并能够添加/编辑。 这是我的班级对象 Student

package com.example.simpleparadox.studentList;
import java.io.Serializable;

public class City implements Serializable
private String Sname;
private String nationality;

City(String Sname, String nationality)
    this.Sname=name;
    this.nationality=nationality;


public void setName(String Sname) 
    this.Sname = Sname;


public void nationality(String nationality) 
    this.nationality = nationality;


String getSname() 
    return this.Sname;


String getNationality() 
    return this.nationality;

这是添加/编辑学生姓名和国籍的片段

public class AddStudentFragment extends DialogFragment 
private EditText sName;
private EditText nationlaity;
private OnFragmentInteractionListener listener;

public interface OnFragmentInteractionListener 
void onOkPressed(City newCity);


@Override
public void onAttach(Context context)
super.onAttach(context);
if(context instanceof OnFragmentInteractionListener)
    listener=(OnFragmentInteractionListener) context;
else
    throw new RuntimeException(context.toString()+"must implement OnFragmentInteractionListener");

static AddStudentFragment newInstance(Student student)
Bundle args=new Bundle();
args.putSerializable("student",student);
AddStudentFragment fragment=new AddStudentFragment();
fragment.setArguments(args);
return fragment;

@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());
return builder
        .setView(view)
        .setTitle("Add student")
        .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();
                listener.onOkPressed(new Student(newName,newNationality));
            
        ).create();


我的目标是创建一个多功能按钮,如果我只需按下“添加”按钮就可以添加学生。但是如果我从学生列表视图中选择一个项目然后按下按钮,它应该编辑现有学生的姓名和国籍。我已经成功创建了第一个函数,但我被困在了编辑部分。具体来说,我不知道如何从 Bundle 中检索现有的学生对象。谁能帮帮我?

【问题讨论】:

【参考方案1】:
    您需要为学生定义 ID。 在OnFragmentInteractionListener 界面中,您需要有两个函数addStudent(Student student)editStudent(Student student)。 在AddStudentFragment 中,定义Student selectedStuden 变量 onStart,从Bundle 获取学生并设置为selectedStudent。如果为 null,则当您 addStudent 时。否则,当你 editStudent 时。 onCreateDialog,如果selectedStudent != null,设置学生姓名和国籍为TexViewonClick
    public void onClick(DialogInterface dialogInterface,int i)
                if seletedStuden == null
                    String newName=sName.getText().toString();
                    String newNationality=nationality.getText().toString();
                    listener.addStudent(new Student(newName,newNationality));
                 else 
                    seletedStuden.setName(sName.getText().toString());
                    seletedStuden.setNationality(nationality.getText().toString())
                    listener.editStudent(seletedStuden);
                
                
            
    基于Student ID 更新到Student List

【讨论】:

以上是关于编辑片段中的列表视图对象的主要内容,如果未能解决你的问题,请参考以下文章

片段 A 的列表视图中的片段 B 中的新列表视图,单击 A 的列表项

从活动更新视图页面中片段中的列表视图

是否可以将一个对象从一个片段发送到另一个片段?

带有自定义对象的可编辑列表视图

如何将列表视图中的数据从一个片段发送到另一个片段

片段中的 notifyDataSetChanged() 不刷新列表视图