如何覆盖 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】:

首先,我建议对StringInteger 对象使用ArrayList,而不是普通数组。有了这个,您可以更轻松地附加数据。

在您的Activity 中,您保留对传递给适配器的StringInteger 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 方法来添加图像和文本视图?我有自定义数组适配器类的主要内容,如果未能解决你的问题,请参考以下文章

如何在fabric js中覆盖canvas.add()方法

如何在Django中覆盖相关集的“add”方法

使用 ArrayAdapter 将 volley 响应传递给 listview

如何在 ArrayAdapter 中调用 getSupportFragmentManager()

如何使用 HashMap 并在 ArrayAdapter 中使用它来显示微调器中的值

当 ArrayAdapter.isEnabled 返回 false 时,ListView 中的分隔符消失