我的代码:以onCreate Override开头,然后底部是我的ArrayAdapter。我试图将数组中的单个字符串添加到TextView。当我运行应用程序时,它将数组中的所有字符串放在它所生成的每个TextView上。谢谢你看看。
MyListAdapter adapter = new MyListAdapter(mMyStringArrayArray());
setListAdapter(adapter);
...
private class MyListAdapter extends ArrayAdapter<String> {
public MyListAdapter(ArrayList<String> strings) {
super(getActivity(), 0, strings);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// If we weren't given a view, inflate one
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.my_list, null);
}
LinearLayout mLinearLayout = (LinearLayout)convertView.findViewById(R.id.my_list_linearLayout);
TextView[] strings = new TextView[mMyStringArray.size()];
for (int i = 0; i < mMyStringArray().size(); i++) {
// Create TextView
strings[i] = new TextView(getActivity());
strings[i].setText(mMyStringsArray(i));
strings[i].setId(i + 5);
mLinearLayout.addView(strings[i]);
}
return convertView;
}
}
答案 0 :(得分:0)
getView()
中的每个项目调用{p> Adapter
一次。因此,对于for loop
,您mMyStringArray
中的每个项目都会Adapter
中的每个项目。请尝试使用position
来获取所需的元素。像这样的东西
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// If we weren't given a view, inflate one
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.my_list, null);
}
LinearLayout mLinearLayout = (LinearLayout)convertView.findViewById(R.id.my_list_linearLayout);
TextView[] strings = new TextView[mMyStringArray.size()];
// Create TextView
strings[position] = new TextView(getActivity());
strings[position].setText(mMyStringsArray(i));
strings[position].setId(position + 5);
mLinearLayout.addView(strings[position]);
}
return convertView;
}
这样的事情应该有用。但是,由于您拥有layout
,因此在TextView
的{{1}}内创建LinearLayout
并使用它会更容易。
my_list.xml
我还建议观看The world of ListView