ArrayList <string>自定义适配器

时间:2015-09-06 17:03:17

标签: android sqlite

我不能做ArrayList的ListView适配器因为
整个数据来自SQLite

            final ArrayList<String> list= helper.GetAllValues("x1", column2);
    //final StableArrayAdapter adapter = new StableArrayAdapter(this, android.R.layout.simple_list_item_1, list);
    final ListAdapter adapter = new ListAdapter(this, list, img);
    listview.setAdapter(adapter);

ListAdapter.java

public class ListAdapter extends ArrayAdapter<String> {

private final Activity context;
private final String[] itemname;
private final Integer[] imgid;

public ListAdapter(Activity context, String[] itemname, Integer[] imgid) {
    super(context, R.layout.items, itemname);
    // TODO Auto-generated constructor stub

    this.context=context;
    this.itemname=itemname;
    this.imgid=imgid;
}

public View getView(int position,View view,ViewGroup parent) {
    LayoutInflater inflater=context.getLayoutInflater();
    View rowView=inflater.inflate(R.layout.items, null,true);

    TextView txtTitle = (TextView) rowView.findViewById(R.id.TitleLabel);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    TextView extratxt = (TextView) rowView.findViewById(R.id.SecondLabel);

    txtTitle.setText(itemname[position]);
    imageView.setImageResource(imgid[position]);
    extratxt.setText("Description "+itemname[position]);
    return rowView;

};
}

错误:(66,37)错误:类ListAdapter中的构造函数ListAdapter无法应用于给定类型;
required:Activity,String [],Integer []
found:Listofmeals,ArrayList,Integer []
原因:实际参数ArrayList无法通过方法调用转换

转换为String []
private final String[] itemname;
private final Integer[] imgid;

这是错误的:

txtTitle.setText(itemname[position]);
imageView.setImageResource(imgid[position]);
extratxt.setText("Description "+itemname[position]);

如何键入Arraylist我必须插入?

1 个答案:

答案 0 :(得分:0)

您在适配器中声明的构造函数需要String[],但您传入的是ArrayList。更改适配器代码以使用ArrayList,或使数据库帮助器返回String[]而不是ArrayList。仅此一项就可以解决编译错误。

在我看来,如果你在一个类中封装了一个项目的所有信息并且使用该类型的单个数组(或列表)而不是字符串,图像等的单独数组/列表,那么你的代码会更清晰。

public class MyItem {
    String name;
    int imageRes;
}

然后,您可以将ArrayAdapter<MyItem>与数组或MyItem个对象列表一起使用。

如果名称和图片ID都存储在您的SQLite表中,那么您还有另一种选择:使用CursorAdapter代替。在这种情况下,您可能希望从数据库中获取Cursor并使用它,这意味着您无需在使用之前将所有数据转换为数组或列表。