Я хочу создать пользовательский адаптер для просмотра списка. Это мой JSON:Пользовательский адаптер ListView с делителем
{
"Model": [{
"Group": "Group 1",
"person": [{
"Name": "Name 1",
"Country": "Country 1"
}]
}, {
"Group": "Group 2",
"person": [{
"Name": "Name 1",
"Country": "Country 1"
}, {
"Name": "Name 2",
"Country": "Country 2"
}]
}],
"Success": true
}
Проблема заключается в том, что есть 2 JSON группа, и я хочу перечислить ребенок каждой группы. Кроме того, для каждого ребенка мне нужно показать своего рода разделитель для разделения каждой группы.
Это мой пользовательский ListView адаптер:
public class GroupListAdapter extends BaseAdapter {
Context context;
ArrayList<GroupModel> groupList;
public GroupListAdapter(Context context, ArrayList<GroupModel> groupList){
this.context = context;
this.groupList = groupList;
}
@Override
public int getCount() {
return groupList.size();
}
@Override
public Object getItem(int position) {
return groupList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
static class ViewHolder{
private TextView txtName;
private TextView txtCountry;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.fila_contacto, null);
viewHolder = new ViewHolder();
viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtName);
viewHolder.txtCountry = (TextView) convertView.findViewById(R.id.txtCountry);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
return convertView;
}
}
GroupList.java
public class GroupModel implements Serializable {
public String DescriptionDivider;
public ArrayList<ChildModel> ChildModel;
}
ChildModel
public class ChildModel implements Serializable {
public String Name;
public String Country;
}
EDIT: Также, когда я передаю список групп адаптеру, работает только с дочерним элементом первой группы.
EDIT 2: Сейчас в моей группе адаптер я добавил ListView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.fila_contacto, null);
viewHolder = new ViewHolder();
GroupList groupList = groupList.get(position);
viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtName);
viewHolder.lstChild = (ListView) convertView.findViewById(R.id.lstChild);
listViewChildAdapter childAdapter= new listViewChildAdapter (this.context, groupList.ChildModel);
lstChild.setAdapter(childAdapter);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
return convertView;
}
EDIT 3: Добавление ListViewChildAdapter
public class listViewChildAdapter extends BaseAdapter {
Context context;
ArrayList<ChildModel> childList;
public listViewChildAdapter(Context context, ArrayList<ChildModel> childList){
this.context = context
this.childList = childList;
}
static class ViewHolder{
private TextView txtName;
private TextView txtCountry;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.child_row, parent, true);
viewHolder = new ViewHolder();
viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtName);
viewHolder.txtCountry = (TextView) convertView.findViewById(R.id.txtCountry);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
ChildModel child = childList.get(position);
// region Campos NO NULLEABLES
viewHolder.txtName.setText(child.Name);
viewHolder.txtCountry.setText(child.Country);
// endregion
return convertView;
}
}
Спасибо за помощь
вы можете попробовать это, если (jsonObject.has («Группа 1»)) –
@ Химани Где я должен это поставить? Также, когда я передаю адаптеру список группы, адаптер работает только с дочерним элементом для первой группы –
эй, вы можете поместить весь дочерний объект в один список во время разбора и просто показать их с помощью 'ListView'. Разве это не решит вашу проблему? – himanshu1496