2016-05-15 12 views
0

Ich habe ein Problem mit meinem Adapter. Ich konnte bereits einige Informationen von meinem JSON (codeLieu und libelle) anzuzeigen, die wie folgt aussieht:Get String in Liste im Adapter (Gson)

[ 
    { 
     "codeLieu": "OTAG", 
     "libelle": "50 Otages", 
     "distance": null, 
     "ligne": [ 
      { 
       "numLigne": "2" 
      }, 
      { 
       "numLigne": "C2" 
      }, 
      { 
       "numLigne": "12" 
      }, 
      { 
       "numLigne": "23" 
      } 
     ] 
    }, 
... 
] 

Hier ist mein Modell:

package material.romain.com.projentreprise.Adapter; 

import com.google.gson.annotations.SerializedName; 

import java.io.Serializable; 
import java.util.List; 

public class Response implements Serializable{ 

    private String codeLieu; 
    private String libelle; 
    private String distance; 
    private List<LigneEntities> ligne; 


    public String getCode() { 
     return codeLieu; 
    } 

    public void setCode(String codeLieu) { 
     this.codeLieu = codeLieu; 
    } 

    public String getLibelle() { 
     return libelle; 
    } 

    public void setLibelle(String libelle) { 
     this.libelle = libelle; 
    } 

    public String getDistance() { 
     return distance; 
    } 

    public void setDistance(String distance) { 
     this.distance = distance; 
    } 

    public List<LigneEntities> getLigne() {return ligne;} 

    public void setLigne(List<LigneEntities> ligne) { 
     this.ligne = ligne; 
    } 

    public static class LigneEntities { 
     private String numLigne; 

     public String getLigne() { 
      return numLigne; 
     } 

     public void setLigne(String numLigne) { 
      this.numLigne = numLigne; 
     } 
    } 
} 

Und schließlich das ist mein Adapter:

package material.romain.com.projentreprise.Adapter; 


import android.content.Context; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.graphics.drawable.Drawable; 
import android.graphics.drawable.LayerDrawable; 
import android.support.v4.content.ContextCompat; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Filter; 
import android.widget.Filterable; 
import android.widget.TextView; 

import com.mikepenz.fontawesome_typeface_library.FontAwesome; 
import com.mikepenz.iconics.IconicsDrawable; 

import java.util.ArrayList; 

import de.hdodenhof.circleimageview.CircleImageView; 
import material.romain.com.projentreprise.R; 
import material.romain.com.projentreprise.Util.CircularTextView; 
import material.romain.com.projentreprise.Util.ColorLigne; 

public class ListAdapter extends BaseAdapter implements Filterable { 

    private ArrayList<Response> arret; 
    private Context context; 
    private LayoutInflater inflater; 
    private MyFilter mFilter; 
    private ArrayList<Response> mSearchArret; 

    public ListAdapter(Context mContext, ArrayList<Response> mArretItem) { 
     this.context = mContext; 
     this.arret = mArretItem; 
     this.mSearchArret = mArretItem; 

     getFilter(); 
    } 

    @Override 
    public int getCount() { 
     return mSearchArret.size(); 
    } 

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

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

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

     Response item = (Response) getItem(position); 
     ColorLigne.ViewHolder holder = null; 

     if (convertView == null) { 
      holder = new ColorLigne.ViewHolder(); 
      inflater = LayoutInflater.from(context); 
      convertView = inflater.inflate(R.layout.each_list_item, parent, false); 

      holder.circleImage = (CircleImageView) convertView.findViewById(R.id.circleView); 
      holder.textArret = (TextView) convertView.findViewById(R.id.tvListArret); 
      holder.circle = (CircularTextView) convertView.findViewById(R.id.tvArretColor); 
      convertView.setTag(holder); 

     } else { 
      holder = (ColorLigne.ViewHolder) convertView.getTag(); 
     } 

     Drawable color = new ColorDrawable(ContextCompat.getColor(context, R.color.tanVert)); 
     Drawable image = new IconicsDrawable(context).icon(FontAwesome.Icon.faw_bus).color(Color.WHITE).sizeDp(48).paddingDp(10); 

     LayerDrawable ld = new LayerDrawable(new Drawable[]{color, image}); 

     holder.circleImage.setImageDrawable(ld); 
     holder.textArret.setText(item.getLibelle()); 


     return convertView; 
    } 

    @Override 
    public Filter getFilter() { 
     if (mFilter == null) { 
      mFilter = new MyFilter(); 
     } 
     return mFilter; 
    } 

    class MyFilter extends Filter { 

     @Override 
     protected FilterResults performFiltering(CharSequence prefix) { 
      FilterResults results = new FilterResults(); 

      if (prefix != null && prefix.length() > 0) { 
       ArrayList<Response> tempList = new ArrayList<>(); 

       for (Response value : arret) { 
        if (value.getLibelle().toLowerCase().contains(prefix.toString().toLowerCase())) { 
         tempList.add(value); 
        } 
       } 
       results.count = tempList.size(); 
       results.values = tempList; 
      } else { 
       results.count = arret.size(); 
       results.values = arret; 
      } 
      return results; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      try { 
       mSearchArret = (ArrayList<Response>) results.values; 
       if (results.count > 0) { 
        notifyDataSetChanged(); 
       } else { 
        notifyDataSetInvalidated(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

Und ich möchte Strings von "ligne" bekommen, aber es ist in einer Liste und ich weiß nicht, wie man darauf zugreifen kann. Mein Ziel ist es, die Strings in einen circleTextView zu setzen.

Edit: Ich habe versucht, diese in getView Methode

Response item = getItem(position); 
for(Response value: arret){ 
      value = item; 
      String ligneItem = value.getLigne().toString(); 
      ColorLigne.setColorLigne(ligneItem, holder, context);  
      holder.circle.setText(ligneItem); 
      holder.circle.setStrokeWidth(0); 

     } 

Antwort

0

hinzufügen unten Methode zu Ihrem Response.java

public String getItems() { 

    StringBuilder builder = new StringBuilder(); 

    for (LigneEntities entity : getLigne()) { //loop through every item from the list 
     builder.append(entity.getLigne() + ","); //add to StringBuilder 
    } 

    builder.replace(builder.length() - 1, builder.length(), "");//remove last ,(semicolon) 
    return builder.toString(); 
} 

Einstellung zu Ihrem CircleTextView

holder.circle.setText(item.getItems());

happyCoding;

+0

Ihre Antwort war sehr hilfreich, jetzt kann ich Inhalt in meiner Textansicht anzeigen, aber es gibt ein weiteres Problem, das ich Ihnen ein Bild poste http://image.noelshack.com/fichiers/2016/20/1463414765-screenshot- 2016-05-16-18-02-16.png Im roten Rechteck ist alles in Ordnung, weil ich nur eine Zeichenfolge habe (es ist eine Busleitungsnummer), aber im schwarzen Rechteck kann man sehen, dass ich viele Zeichenfolgen habe. Mein Ziel ist es, eine Nummer in verschiedenen 'CircleTextView' anzuzeigen. Ich denke, der beste Weg ist, programmatisch TextView in einer foreach-Schleife zu erstellen und kann neues Layout erstellen und es dem vorhandenen Layout hinzufügen, um Textansicht zu reorganisieren. – NeoSyder

+0

Ja, Sie haben Recht. Pro-grammatisch müssen Sie Ansichten erstellen. Verwenden Sie LinearLayout und fügen Sie Ansichten hinzu. – Bharatesh

Verwandte Themen