【问题标题】: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 中检索现有的学生对象。谁能帮帮我?

【问题讨论】:

    标签: java android android-fragments android-fragmentactivity


    【解决方案1】:
    1. 您需要为学生定义 ID。
    2. OnFragmentInteractionListener 界面中,您需要有两个函数addStudent(Student student)editStudent(Student student)
    3. AddStudentFragment 中,定义Student selectedStuden 变量
      • onStart,从Bundle 获取学生并设置为selectedStudent。如果为 null,则当您 addStudent 时。否则,当你 editStudent 时。
      • onCreateDialog,如果selectedStudent != null,设置学生姓名和国籍为TexView
      • onClick
        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);
                    }
                    
                }
    
    1. 基于Student ID 更新到Student List

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      相关资源
      最近更新 更多