Java 只有最后一个元素在listView中多次显示
我有一个方法,它将元素添加到GetterSetter类中,并将元素添加到arrayList,然后将元素添加到listView中。在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();
我不明白为什么?有解决办法吗 这是我的密码:
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;
}
}