我有一个String数组,我想在列表中显示它的项目。 我有一个包含一个表的row.xml,每行我有三个TextView。 我想要的是,每行显示每三个数组项。
示例:String[] str = {"1", "2", "3", "4", "5", "6"};
每行应该是这样的:
str[1]----str[2]----str[3]
str[4]----str[5]----str[6]
我的xml代码是:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:shrinkColumns="*"
android:stretchColumns="*" >
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip" >
<TextView
android:id="@+id/outstanding_contractdate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:textSize="15sp" />
<TextView
android:id="@+id/outstanding_contractno"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:textSize="15sp" />
<TextView
android:id="@+id/outstanding_contractamount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textColor="#ffffff"
android:textSize="15sp" />
</TableRow>
</TableLayout>
在OnCreate()中我放了(我有一些其他视图和listView):
lvOutstanding = (ListView) findViewById(R.id.outstanding_list);
lvOutstanding.setAdapter(new MyListAdapter());
这是我的适配器:
class MyListAdapter extends ArrayAdapter<String>{
MyListAdapter(){
super(MSOutStanding.this, R.layout.list_outstanding, tokens);
}
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
//String str = llData.get(position);
//String[] tokens = str.split(",");
if(row == null){
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.list_outstanding, parent, false);
}
TextView tvContDate = (TextView) row.findViewById(R.id.outstanding_contractdate);
TextView tvContNo = (TextView) row.findViewById(R.id.outstanding_contractno);
TextView tvContAmount = (TextView) row.findViewById(R.id.outstanding_contractamount);
tvContDate.setText(tokens[0]);
tvContNo.setText(tokens[1]);
tvContAmount.setText(tokens[2]);
return(row);
}
}
我的第一个问题是,我没有看到我想要的结果。第二个是,我已经以这种方式将“标记”定义为我的类(private static String[] tokens = {"", "", ""};
)顶部的字符串数组,当我运行应用程序时,它向我显示三行具有相同的结果。
但如果我改变Private static String[] tokens;
之类的定义,程序就会崩溃。
我头疼:(如果有可能告诉我我的错在哪里?
由于
答案 0 :(得分:1)
使用时:
static String[] tokens;
而不是:
static String[] tokens = { "", "", "" };
令牌未初始化,意味着令牌[n]为空,导致崩溃。 在你的评论中,做标记[position * count + 1]将很快超出数组的范围 - 如果你使用tokens = {“”,“”,“}}如上所述,数组中只有3个元素
使用以下行将标记传递给超级构造函数时:
super(MSOutStanding.this, R.layout.list_outstanding, tokens);
你说列表中应该有3行,因为数组中有3个元素。对于第3项,position = 3 * count = 3 == boom进入数组。
解决的一种方法: 将对象的数组(或ArrayList)传递给超级构造函数:
public class Contract {
String date;
String no;
String amount;
Contract(String d, String n, String a) {
date = d;
no = n;
amount = a;
}
}
Contract[] contracts = { new Contract("1", "2", "3"), new Contract("4", "5", "6") };
class MyListAdapter extends ArrayAdapter<Contract>{
MyListAdapter(){
super(MSOutStanding.this, R.layout.list_outstanding, contracts);
}
}
...
public View getView(int position, View convertView, ViewGroup parent){
...
Contract c = getItem(position);
tvContDate.setText(c.date);
tvContNo.setText(c.no);
tvContAmount.setText(c.amount);
...
}