如何将动态android xml布局作为参数传递给自定义数组适配器类

时间:2017-09-19 03:32:53

标签: java android

我们正在为我们的android项目制作动态自定义数组适配器。现在我们需要在初始化此自定义适配器类时将动态android布局对象和其他数据源作为参数传递。之后,一切都将是动态的。

public class CustomAdapterView extends ArrayAdapter<String> {
private Activity context;
private String[] googleProducts;
private String[] productDescription;
private Integer[] productImage;
private Layout listItemLayout;

public CustomAdapterView(Activity context, Layout listItemLayout, String[] googleProducts, String[] productDescription, Integer[] productImage) {

    super(context, R.layout.content_custom_listview, googleProducts);
    // Tring to do this
    //super(context, listItemLayout, googleProducts);
    //Error: Cannot resolve method 'super(android.app.Activity, android.text.Layout, java.lang.String[])'

    // Set Local Property
    this.context = context;
    this.googleProducts = googleProducts;
    this.productDescription = productDescription;
    this.productImage = productImage;
}

现在在super()方法中,我们想要传递动态布局以显示自定义列表视图。

super(context, listItemLayout, googleProducts);
  

//错误:无法解析方法'super(android.app.Activity,   android.text.Layout,java.lang.String [])'

比从任何活动中调用

// Initialize
    ListView lv = (ListView) findViewById(R.id.custom_listview);
    Layout dynamicLayout = null;

    // Our Custom Adapter Object
    CustomAdapterView cav = new CustomAdapterView(this, dynamicLayout, googleProducts, productDescription, productImage);
    //Set Adapter
    lv.setAdapter(cav);

2 个答案:

答案 0 :(得分:1)

R.layout.content_custom_listviewint因此,该签名不会有super方法。您可以将int类型直接传递到适配器,而不是Layout类型。

答案 1 :(得分:0)

你好像混淆了布局&#34;资源(即包含一堆视图的xml文件,通过R.layout.foo常量访问)和android.text.Layout object(管理显示文本的内部,例如在TextView中)

布局资源通常作为int传递,或者作为从该布局资源中膨胀的View传递。您的自定义适配器的构造函数可能非常高:

public CustomAdapterView(Activity context, 
    Layout listItemLayout,
    String[] googleProducts,
    String[] productDescription,
    Integer[] productImage) {

    ...
}
应该像这样声明

public CustomAdapterView(Activity context, 
    int listItemLayout,
    String[] googleProducts,
    String[] productDescription,
    Integer[] productImage) {

    ...
}