我有一个列表视图,左侧是图像图标,右侧是三行文本视图。我已经创建了布局,但在创建适配器类时,我遇到了一些问题。这是代码:
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[][])
如何解决此问题?
答案 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[][] message
和String singleMessage = getItem(position)[2];