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

时间:2015-04-20 12:53:04

标签: 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);
    }
}

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

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

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

  

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

如何解决此问题?

3 个答案:

答案 0 :(得分: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);    
    }
}

答案 1 :(得分:2)

创建一个模型类(单独),其中包含所需的所有三个字段。然后在您的活动中创建arraylist并向其添加项目。将这个arraylist传递给它适用的适配器。

答案 2 :(得分:0)

就我而言,我改变了ArrayAdapter并且它正在运行 您可以更改此代码

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);
    }
}

我的代码示例

public class CustomAdepter extends ArrayAdapter<String[]> {
    public CustomAdepter(@NonNull Context context, String[][] message) {
        super(context, R.layout.message_list, message);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(getContext());
        View customView = inflater.inflate(R.layout.message_list, parent, false);
        String singleMessage = getItem(position)[2];
        TextView textView = (TextView) customView.findViewById(R.id.firstLine);
        textView.setText(singleMessage);
        return customView;
    }
}

查看ArrayAdapter<String[]>, String[][] messageString singleMessage = getItem(position)[2];

中的更改