如何覆盖ArrayAdapter添加方法以向其添加图像和textview?我有自定义数组适配器类

时间:2015-07-04 11:48:45

标签: java android json listview android-listview

当我初始化适配器对象并将其设置为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;
    }
}

我想在设置数组适配器后添加更多项目。(带文本的图像)我知道如何只添加文本。

2 个答案:

答案 0 :(得分:3)

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

Activity中,您保留对传递给适配器的StringInteger 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(....);