首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >listview、arraylist和array适配器中对象的Android生命周期

listview、arraylist和array适配器中对象的Android生命周期
EN

Stack Overflow用户
提问于 2013-10-04 14:45:45
回答 1查看 3K关注 0票数 0

我正在构建一个原型应用程序,帮助研究人员跟踪一小群(8-10人)的患者。他们需要定期更新病人的信息。我想要能够点击一个按钮,以显示所有病人的列表,如果不是所有病人的信息,在每一行。我创建了一个基本的病人类:

代码语言:javascript
复制
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;
}

}

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

代码语言:javascript
复制
 Patient[] cohort= new Patient[maxPatients];

现在,我发现为了在ListView中显示,必须使用数组适配器。我发现了许多例子和教程,比如沃格拉氏教程,它们非常有帮助。不幸的是,大多数示例使用字符串数组来创建示例。

我已经把我需要的所有信息都列出来了。现在,我需要使用一个弹出对话框后,选择一个单独的病人显示/编辑所有数据的长按压。我已经做到了,但这是我被困在这里的地方。

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

作为一个刚入门的android程序员,我显然不完全理解原始数组、数组列表和数组适配器之间的关系--即使在我做了这么多读取之后。我当前的代码很笨拙,也不太优雅,因为它是从许多示例的片段中拼凑而成的,加上许多不必要的调试代码。在调试期间,我在队列数组、arraylist和array适配器中看到多个患者的副本。

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

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

我需要这个应用程序运行在Android2.3和更高版本上,因为Grad学校的研究人员并不都有最新的Android设备。希望这在方法上没有什么不同。

EN

回答 1

Stack Overflow用户

发布于 2014-04-07 11:41:43

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

下面的示例是一个关于如何创建自己的适配器,然后在listview中使用患者数组的示例。

我做了一些简单的事情,只是在名单上的另一节课而已。如果您创建了患者的数组列表:

代码语言:javascript
复制
ArrayList <Patient> patientList = new ArrayList<Patient>();
// Add patients to the list:
patientList.add(new Patient());
patientList.add(new Patient());
// etc...

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

代码语言:javascript
复制
PatientListAdapter adapter = new PatientListAdapter(getApplicationContext(), patientList);
ListView patientListView.setAdapter(adapter);

创建自定义列表适配器:

代码语言:javascript
复制
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中,您可以访问数组中的病人:

代码语言:javascript
复制
@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中的性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19184180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档