当我初始化适配器对象并将其设置为listview适配器时,我正在成功添加带有文本的图像,但是当我从包含图像的互联网获取更多数据时,我想要添加更多项目。我正在使用包含图片网址的json从互联网上检索信息。 这是我的适配器代码
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] web;
private final Integer[] imageId;
public CustomList(Activity context,
String[] web, Integer[] imageId) {
super(context, R.layout.list_single, web);
this.context = context;
this.web = web;
this.imageId = imageId;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(web[position]);
imageView.setImageResource(imageId[position]);
return rowView;
}
}
我想在设置数组适配器后添加更多项目。(带文本的图像)我知道如何只添加文本。
答案 0 :(得分:3)
首先,我建议对ArrayList
和String
对象使用Integer
,而不是普通数组。有了它,您可以更轻松地附加数据。
在Activity
中,您保留对传递给适配器的String
和Integer
ArrayList
个对象的引用。收到新日期后,只需将此数据添加到列表中即可。
更新数据后,您应该调用适配器的notifyDataSetChanged()
方法以在视图中显示数据。
- 编辑 -
另一个建议:您应该回收已在getView
方法中创建的视图。您可以通过检查提供的内容视图(第二个参数)是否为空来执行此操作。这将大大提高较大ListViews
public View getView(int position, View view, ViewGroup parent) {
if(view == null){
LayoutInflater inflater = context.getLayoutInflater();
view= inflater.inflate(R.layout.list_single, null, true);
}
TextView txtTitle = (TextView) view.findViewById(R.id.txt);
ImageView imageView = (ImageView) view.findViewById(R.id.img);
txtTitle.setText(web[position]);
imageView.setImageResource(imageId[position]);
return view;
}
答案 1 :(得分:1)
在getView
方法的开头尝试此操作:
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView= inflater.inflate(R.layout.list_single, null); //Try both with ", true" and without.
此外,尝试构建并将Drawable对象传递给imageView.setImageResource(....);