如何在自定义列表视图的自定义适配器类中传递多个数组值?

Jav*_*ast 36 android listview

我有一个列表视图,左侧是图像图标,右侧是三行文本视图.我已经创建了布局,但在创建适配器类时,我遇到了一些问题.这是代码:

import android.app.Activity;
import android.widget.ArrayAdapter;

public class CustomList extends ArrayAdapter<String>{

    private final Activity context;
    private final String[][] listRow;
    private final Integer[] imageId;

    public CustomList(Activity context, String[][] listRow, Integer[] imageId){
        super(context, R.layout.rowlayout, listRow);
    }
}
Run Code Online (Sandbox Code Playgroud)

首先,我为三个textview创建了三个1D数组,但在构造函数中我无法全部传递它们.

所以我必须创建一个2D数组,其中表中的每一行都代表有关单个列表视图项的信息.

但我无法这样做.我收到一个错误:

无法super(android.app.Activity, int, java.lang.String[][])使用2D数组解析方法

我该如何解决这个问题?

Jav*_*ast 23

经过很长一段时间的努力,我找到了解决方案.我创建了一个单独的类来存储每个单独行的数据值,并创建了相同的对象数组.

以下是示例代码:

import android.app.Activity;
import android.widget.ArrayAdapter;

class ListItem
{
    public String textview1;
    public String textview2;
    public String textview3;
    public int imageId;

    public ListItem(String t1, String t2, String t3, int imageId)
    {
        this.textview1 = t1;
        this.textview2 = t2;
        this.textview3 = t3;
        this.imageId = imageId;
    }
}

public class CustomList extends ArrayAdapter<Object>
{
    private Activity context;
    private ListItem listItem[];

    public CustomList(Activity context, ListItem li[])
    {
        super(context, R.layout.rowlayout, li);    
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 好方法.创建用于以更易读/ OOP的方式存储数据的对象.通过这种方式,您可以过滤掉将来可能存在的混淆. (8认同)
  • 而不是公开属性,最好使用get和setter方法.这是更优选的方法,因为我们不应该公开我们的属性. (2认同)