使用JSON数组动态构建ListView

时间:2015-02-12 01:57:53

标签: android json adapter

我有一个返回JSON数组的PHP脚本。阵列中的每个JSON对象都是一个人,并且具有相关信息,例如姓名,电话号码,年龄。

我想要做的是动态构建一个ListView,它将显示信息,其中列表的每个元素都显示名称,电话号码和年龄。

现在我有基本代码循环我的JSON数组,但是如何设置我的适配器以便它显示这3个独立的信息?我知道如何显示单个项目,例如名称,但我不能100%确定如何创建可以显示JSON对象中的多个项目的适配器。

            JSONArray json = new JSONArray(result);
            setContentView(R.layout.activity_doctor_list);
            ListView listView = (ListView) findViewById(R.id.listView);
            ArrayList<String> listItems = new ArrayList<String>();
            ArrayAdapter<String> adapter = new ArrayAdapter<String>  
                (getApplicationContext(), R.layout.doctor_item, listItems);
            JSONObject doctor;

            for(int i =0; i < json.length(); i++){
                doctor = json.getJSONObject(i);
            }

1 个答案:

答案 0 :(得分:0)

您需要创建自己的适配器:

public class MyAdapter extends BaseAdapter {

Context context;
JSONArray content;

public MyAdapter(Context context, JSONArray content) {
    this.context = context;
    this.content = content;
}

@Override
public int getCount() {
    return content.length();
}

@Override
public Object getItem(int position) {
    return content.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

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

    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.my_layout);
        viewHolder = new ViewHolder();
        viewHolder.name = convertView.findViewById(R.id.name);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    JSONObject jsonObject = content.get(position);
    viewHolder.name.setText(jsonObject.optString("name"));

    return convertView;
}

public static class ViewHolder {
    public TextView name, location, whatever;
}

}

my_layout.xml

<LinearLayout>
    <TextView id="name" />
    <TextView id="location" />
    <TextView id="whatever" />
</LinearLayout>