我有一个返回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);
}
答案 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>