2016-09-01 2 views
0

Ich möchte einen benutzerdefinierten Listenansicht Adapter machen. Das ist mein json:Benutzerdefinierte ListView Adapter mit Teiler

{ 
    "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 
} 

Das Problem ist, dass die json 2 Gruppe haben, und ich möchte das Kind jeder Gruppe auflisten. Außerdem muss ich für jedes Kind eine Art Trennzeichen zeigen, um jede Gruppe zu trennen.

Dies ist meine benutzerdefinierte Listview-Adapter:

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: Auch wenn ich die Liste der Gruppe an den Adapter übergeben, funktioniert nur mit dem Kind der ersten Gruppe.

EDIT 2: Jetzt in meiner Gruppe Adapter habe ich eine Listenansicht:

@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: Hinzufügen 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; 
} 
} 

Vielen Dank für

+0

können Sie dies versuchen, wenn (jsonObject.has ("Gruppe 1")) –

+0

@Himani Wo muss ich das setzen? Auch wenn ich die Liste der Gruppe an den Adapter übergebe, funktioniert der Adapter nur mit dem Kind für die erste Gruppe –

+0

hey Sie können alle untergeordneten Objekte in einzelne Listen während der Analyse einfügen und sie einfach mit 'ListView' anzeigen. Würde das dein Problem nicht lösen? – himanshu1496

Antwort

Verwandte Themen