Java 只有最后一个元素在listView中多次显示

Java 只有最后一个元素在listView中多次显示,java,android,listview,arraylist,getter-setter,Java,Android,Listview,Arraylist,Getter Setter,我有一个方法,它将元素添加到GetterSetter类中,并将元素添加到arrayList,然后将元素添加到listView中。在listView中,它只多次显示数组中最后的项。 我不明白为什么?有解决办法吗 这是我的密码: protected void onPostExecute(String str) { myArrayList = new ArrayList<GetterSetter>(); addValues = new GetterSetter();

我有一个方法,它将元素添加到GetterSetter类中,并将元素添加到arrayList,然后将元素添加到listView中。在listView中,它只多次显示数组中最后的项。
我不明白为什么?有解决办法吗

这是我的密码:

protected void onPostExecute(String str) {

    myArrayList = new ArrayList<GetterSetter>();
    addValues = new GetterSetter();
    String rating="-NA-";
    try {

        JSONObject root = new JSONObject(str);
        JSONArray results = root.getJSONArray("results");
        for (int i = 0; i < results.length(); i++) {
            JSONObject arrayItems = results.getJSONObject(i);
            JSONObject geometry = arrayItems.getJSONObject("geometry");
            JSONObject location = geometry.getJSONObject("location");

            if(!arrayItems.isNull("rating")){
                rating = arrayItems.getString("rating");
            }

            addValues.setLat(location.getString("lat"));
            addValues.setLon(location.getString("lng"));
            addValues.setName(arrayItems.getString("name").toString());
            addValues.setRating(rating);
            addValues.setVicinity(arrayItems.getString("vicinity").toString());

            Log.d("Before", myArrayList.toString());

            myArrayList.add(addValues);

        }
    } catch (Exception e) {

    }
    System.out
            .println("############################################################################");
    Log.d("After:", myArrayList.toString());
    nodata = (TextView) findViewById(R.id.nodata);
    nodata.setVisibility(View.GONE);
    adapter = new CustomAdapter(ListActivity.this, R.layout.list_row, myArrayList);
    myList.setAdapter(adapter);
    //adapter.notifyDataSetChanged();
    dialog.dismiss();
}

 }
以下是适配器代码:

public class CustomAdapter extends ArrayAdapter<GetterSetter> {

Context context;
ArrayList<GetterSetter> placesArray;
int textViewResourceId;

public CustomAdapter(Context context, int textViewResourceId, List<GetterSetter> objects) {
    super(context, textViewResourceId, objects);
    this.placesArray = (ArrayList<GetterSetter>) objects;
    this.context = context;
    this.textViewResourceId = textViewResourceId;

}

@Override public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    TextViewHolder holder = null;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(textViewResourceId, parent, false);

        holder = new TextViewHolder();
        holder.name = (TextView) row.findViewById(R.id.name);
        holder.rating = (TextView) row.findViewById(R.id.rating);
        holder.ratingText = (TextView) row.findViewById(R.id.ratingRext);
        row.setTag(holder);
    } else {
        holder = (TextViewHolder) row.getTag();
    }

    holder.name.setText(placesArray.get(position).name);
    holder.rating.setText(placesArray.get(position).rating);

    return row;
}

static class TextViewHolder {
    TextView name;
    TextView rating;
    TextView ratingText;
}
    }
公共类CustomAdapter扩展了ArrayAdapter{
语境;
ArrayList placesArray;
int textViewResourceId;
公共CustomAdapter(上下文上下文、int textViewResourceId、列表对象){
超级(上下文、textViewResourceId、对象);
this.placesArray=(ArrayList)对象;
this.context=上下文;
this.textViewResourceId=textViewResourceId;
}
@覆盖公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
TextViewHolder=null;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(textViewResourceId,父项,false);
holder=新文本ViewHolder();
holder.name=(TextView)row.findViewById(R.id.name);
holder.rating=(TextView)row.findViewById(R.id.rating);
holder.ratingText=(TextView)row.findViewById(R.id.ratingRext);
row.setTag(支架);
}否则{
holder=(TextViewHolder)行。getTag();
}
holder.name.setText(placesArray.get(position.name));
holder.rating.setText(placesArray.get(position.rating));
返回行;
}
静态类TextViewHolder{
文本视图名称;
文本视图评级;
文本视图分级文本;
}
}

addValues=new GetterSetter()您正在使用一个对象,并多次添加同一个对象

因此,您应该在
for循环中创建
GetterSetter
对象


因为您必须创建与解析对象/数组中相同数量的对象

addValues=new GetterSetter()您正在使用一个对象,并多次添加同一个对象

因此,您应该在
for循环中创建
GetterSetter
对象


因为您必须创建与解析对象/数组中相同数量的对象

yess!非常感谢。今天早上它在for循环中,我想我把它和arrayList一起移出了循环:D.我没有注意到!是的,我会的,但我必须等3分钟:)是的!非常感谢。今天早上它在for循环中,我想我把它和arrayList一起移出了循环:D.我没有注意到!是的,我会的,但我必须等3分钟:)
public class CustomAdapter extends ArrayAdapter<GetterSetter> {

Context context;
ArrayList<GetterSetter> placesArray;
int textViewResourceId;

public CustomAdapter(Context context, int textViewResourceId, List<GetterSetter> objects) {
    super(context, textViewResourceId, objects);
    this.placesArray = (ArrayList<GetterSetter>) objects;
    this.context = context;
    this.textViewResourceId = textViewResourceId;

}

@Override public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    TextViewHolder holder = null;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(textViewResourceId, parent, false);

        holder = new TextViewHolder();
        holder.name = (TextView) row.findViewById(R.id.name);
        holder.rating = (TextView) row.findViewById(R.id.rating);
        holder.ratingText = (TextView) row.findViewById(R.id.ratingRext);
        row.setTag(holder);
    } else {
        holder = (TextViewHolder) row.getTag();
    }

    holder.name.setText(placesArray.get(position).name);
    holder.rating.setText(placesArray.get(position).rating);

    return row;
}

static class TextViewHolder {
    TextView name;
    TextView rating;
    TextView ratingText;
}
    }