2017-03-02 8 views
1

Ich möchte eine benutzerdefinierte adaper, die mehrere String und eine ArrayList<ArrayList<GeofenceDetails>> enthalten.Bind ArrayList <ArrayList<>> in benutzerdefinierten Adapter in Android

private ArrayList<Geofences> geofencesArrayList; 
geofencesArrayList = new ArrayList<Geofences>(); 
assetNameArrayList = new ArrayList<ArrayList<GeofenceDetails>>(); 

geofencesArrayList.add(new Geofences(id,name,type,assetNameArrayList)); 
adapter = new GeofenceNameListAdapter(getActivity(),geofencesArrayList); 

adapter.notifyDataSetChanged(); 
geoListView.setAdapter(adapter); 

Hier ist mein individueller Adapter

public class GeofenceNameListAdapter extends ArrayAdapter<ArrayList<Geofences>> { 
    private final Activity context; 
    private final ArrayList<Geofences> geofences; 
    //song list and layout 
    private LayoutInflater view; 
// private static LayoutInflater inflater=null; 

    public static final String PREFERENCES = "RPREFS"; 
    SharedPreferences sharedprefs = null; 
    private String ord_id = null; 
    private String email = null; 

    public GeofenceNameListAdapter(Activity context, 
            ArrayList<Geofences> geofences) { 

     super(context, R.layout.layout_geofence, geofences.size()); 
     // TODO Auto-generated constructor stub 

     finder_sharedprefs = getContext().getSharedPreferences(PREFERENCES, getContext().MODE_PRIVATE); 

     finder_ord_id = finder_sharedprefs.getString("org_id", null); 
     finder_email = finder_sharedprefs.getString("email", null); 

     this.context = context; 
     this.geofences = geofences; 
    } 
    public View getView(final int position, View view, ViewGroup parent) { 

     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.layout_geofence, null, true); 

     TextView txtTitle = (TextView) rowView.findViewById(R.id.name); 
     TextView txtType = (TextView) rowView.findViewById(R.id.type);rowView.findViewById(R.id.delete); 

    txtTitle.setText(geofences.get(position).getTitle()); 
    txtType.setText(geofences.get(position).getType()); 

    return rowView; 
} 

ich alles auf geofencesArrayList sehen kann. Hier bin ich Druckdaten von geofencesArrayList

for (int l = 0; l<geofencesArrayList.size(); l++) { 
     Log.d("GEOFENCE_DETAILS", geofencesArrayList.get(l).getId().toString()); 
     Log.d("GEOFENCE_DETAILS", geofencesArrayList.get(l).getTitle().toString()); 
     Log.d("GEOFENCE_DETAILS", geofencesArrayList.get(l).getType().toString()); 
    // Log.d("GEOFENCE_DETAILS", geofencesArrayList.get(l).getPoints().toString()); 
     Log.d("GEOFENCE_DETAILS", geofencesArrayList.get(l).getEnforcedData().toString()); 
} 

Aber das Problem ist Adapter keine Daten angezeigt werden soll. Ich denke, in meinem benutzerdefinierten Adapter ist etwas schiefgelaufen, aber ich konnte es nicht herausfinden.

Ich schätze Ihren Rat. Lassen Sie mich wissen Wie kann ich einen benutzerdefinierten Adapter erstellen, um mehrere Zeichenfolgen und ArrayList<ArrayList<>> anzuzeigen.

Vielen Dank im Voraus.

+1

Zwei Dinge auf Code-Qualität: A) die Benennung ... gibt es keinen Punkt den genauen Typ in Ihre Namen in Putten B) Sie tun auch ** nicht ** wollen die spezifische Implementierungsklasse auf Ihre Art verwenden, ; Sie schreiben besser 'private List geofences = new ArrayList <>();' direkt. Viel einfacher zu lesen und zu verwenden! – GhostCat

+0

Es werden keine Daten angezeigt, weil Sie eine falsche Arraylist in Ihrem Adapter senden. Sie haben den GeofenceNameListAdapter-Konstruktor mit ArrayList definiert, während Sie den Adapter mit ArrayList >() initialisiert haben. – Alvi

+0

Danke @GhostCat. Ich werde das machen. – anuradha

Antwort

0

Sie verwenden ArrayAdapter Konstruktor, der 3-rd-Parameter als Ansicht Ressource-ID erhält, aber Sie setzen dort Array-Größe.

super(context, R.layout.layout_geofence, geofences.size()); 

Zunächst einmal ändern Konstruktoraufruf (Platz 3-rd Parameter so etwas wie R.id.list_item oder 2-Parameter-Konstruktor).

Dann sollten Sie getCount Methode in Ihrer GeofenceNameListAdapter Klasse überschreiben.

@Override 
public int getCount() { 
    return geofences.size(); 
} 
Verwandte Themen