如何覆盖 ArrayAdapter add 方法来添加图像和文本视图?我有自定义数组适配器类
Posted
技术标签:
【中文标题】如何覆盖 ArrayAdapter add 方法来添加图像和文本视图?我有自定义数组适配器类【英文标题】:How to override ArrayAdapter add method to add image and textview to it? I have custom array adapter class 【发布时间】:2015-09-22 02:11:06 【问题描述】:当我初始化适配器对象并将其设置为列表视图适配器时,我成功地添加了带有文本的图像,但是当我从 Internet 获取更多包含图像的数据时,我想向它添加更多项目。我正在使用包含图像 url 的 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;
我想在设置数组适配器后添加更多项目。(带有文本的图像)我只知道如何添加文本。
【问题讨论】:
调用“notifyDataSetChanged();”当您收到更多数据时,在您的适配器上。 成功了。谢谢。 【参考方案1】:首先,我建议对String
和Integer
对象使用ArrayList
,而不是普通数组。有了这个,您可以更轻松地附加数据。
在您的Activity
中,您保留对传递给适配器的String
和Integer
ArrayList
对象的引用。当您收到新日期时,您只需将此数据添加到列表中。
当数据更新时,你应该调用适配器的notifyDataSetChanged()
方法在你的视图中显示数据。
--编辑--
另一个建议:你应该回收已经在getView
方法中创建的视图。您可以通过检查提供的 contentview(第二个参数)是否为空来做到这一点。这将大大提高较大的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;
【讨论】:
【参考方案2】:在 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(....);
【讨论】:
以上是关于如何覆盖 ArrayAdapter add 方法来添加图像和文本视图?我有自定义数组适配器类的主要内容,如果未能解决你的问题,请参考以下文章
使用 ArrayAdapter 将 volley 响应传递给 listview
如何在 ArrayAdapter 中调用 getSupportFragmentManager()