0

我正在构建一个原型应用程序,帮助研究人员跟踪一小群 (8-10) 受试者患者。他们需要定期更新患者信息。我希望能够触摸一个按钮来显示所有患者的列表视图,如果不是所有患者信息,每行中的患者信息很多。我创建了一个基本的患者类:

public class Patient {

 public String name;
public String gender;
public int painLevel;
public String risk;
public int score;

public Patient() {
    super();
}

public Patient(String name, String gender, int painLevel, String risk,
        int score) {
    super();
    this.name = name;
    this.gender = gender;
    this.location = painLevel;
    this.risk = risk;
    this.score = score;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getGender() {
    return gender;
}

public void setGender(String gender) {
    this.gender = gender;
}

public int getpainLevel() {
    return painLevel;
}

public void setpainLevel(int painLevel) {
    this.painLevel = painLevel;
}

public int getScore() {
    return score;
}

public void setScore(int score) {
    this.score = score;
}

public void setRisk(String risk) {
    this.risk = risk;
}

public String getRisk() {
    return risk;
}

}

最初我以这种方式将它们输入到数组中:

 Patient[] cohort= new Patient[maxPatients];

现在我发现为了在 ListView 中显示,我必须使用 arrayadapter。我发现了很多例子和教程,比如Vogella 的教程,它们很有帮助。不幸的是,大多数示例使用字符串数组来制作示例。

我已经能够列出我需要的所有信息。现在我需要在长按后使用一个弹出对话框,选择一个病人来显示/编辑所有数据。我已经能够做到这一点,但这是我卡住的地方。

我可以编辑数据,它似乎更改了 arrayList 和 arrayadapter 中的 Patient 字段。我需要帮助的是如何在患者的原始数组队列 [] 中反映这些变化,以及如何删除队列中的患者。现在它会删除一个病人,但在我改变方向之前不会从屏幕上的列表中删除它,即使我调用了 notifyDataSetChanged();。

作为一个新手android程序员,我显然没有完全理解原始数组、数组列表、数组适配器之间的关系——即使我已经完成了所有的阅读。我当前的代码很笨拙,也不是很优雅,因为它是由许多示例的零碎拼凑而成,还有许多不必要的调试代码。在调试期间,我在队列数组、arraylist 和 arrayadapter 中看到患者的多个副本。

如果用户使用新意图点击“编辑患者”按钮,我目前会启动一个编辑屏幕。患者数组用于在数组适配器中构建数组列表,并且列表出现在屏幕上。长按使用具有编辑功能的警报对话框显示特定患者,然后按“保存”、“删除”和“取消”按钮。

我需要重新开始,但需要更有经验的程序员提供一些关于如何更好地解决这个问题的指导。指向基本工作示例代码的指针就足够了,或者列表视图中对象生命周期的流程图可能会更好。(我试着做一个,但最谦虚地迷路了。)我也在 developer.android.com 上花了几个小时,但在所有相关链接之后失去了我最初的任务的踪迹。

我需要该应用程序在 Android 2.3 及更高版本上运行,因为研究生院的研究人员并非都拥有最新的 android 设备。希望这对方法没有影响。

4

1 回答 1

1

不幸的是,大多数示例使用字符串数组来制作示例。

下面的示例是关于如何创建自己的适配器,然后在列表视图中使用患者数组列表的最小示例。

我做了一些类似的事情,只是列表中的另一个类。如果您创建患者的数组列表:

ArrayList <Patient> patientList = new ArrayList<Patient>();
// Add patients to the list:
patientList.add(new Patient());
patientList.add(new Patient());
// etc...

然后将您的自定义适配器添加到列表视图。

PatientListAdapter adapter = new PatientListAdapter(getApplicationContext(), patientList);
ListView patientListView.setAdapter(adapter);

创建您的自定义列表适配器:

private class PatientListAdapter extends BaseAdapter {

    private final Context context;

    private final ArrayList<Patient> patientList;

    public PatientListAdapter(Context context, ArrayList<Patient> itemsArrayList) {

       this.context = context;
       patientList = itemsArrayList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    // code below
    }
}

然后需要重写自定义适配器的getView函数。然后在 getView 中,您可以访问 arraylist 中的 Patient:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    // This is a veeery minimal example.

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    // Custom layout for a row if you want to:
    convertView = inflater.inflate(R.layout.patient_row, parent, false);

   // get the patient's name from the list of patients:

    (TextView) name = (TextView) covertView.findViewById(R.id.patient_name);
    String patientName = patientList.get(position).getName();
    name.setText = patientName;

  return convertView;
}

最后,我鼓励您实施 ViewHolder 模式以提高 ListView 的性能。

于 2014-04-07T11:41:43.827 回答