获取适配器(gson)列表中的字符串

时间:2016-05-15 23:03:06

标签: json arraylist gson adapter

我的适配器有问题。我已经成功地显示了我的JSON(codeLieu和libelle)中的一些信息,如下所示:

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

这是我的模特:

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;
        }
    }
}

最后这是我的适配器:

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();
            }
        }
    }
}

我想从&#34; ligne&#34;中获取字符串。但它在列表中,我不知道如何访问它。我的目标是将字符串放入circleTextView。

编辑: 我在getView方法中试过这个

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);

        }

1 个答案:

答案 0 :(得分:0)

将以下方法添加到您的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(); }

CircleTextView

设置为holder.circle.setText(item.getItems());

{{1}}