我有一个非常恼人的问题。我的任务是添加多个LinearLayouts和自定义XML模板(并且我不知道可以有多少个布局),其中2个TextViews(在每个中)放入1个ListView项目中。 像这样:
是否可以在ArrayAdapter中执行此操作?任何帮助将不胜感激!
好的,我已经设法在Jonas Cz的帮助下做了一些事情。 这就是我所拥有的。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = inflater.inflate(R.layout.parsed_csv_list_view_main_item, parent, false);
}
RealmResults<ParsedCSV> titles = parentFragment.getParsedCSVtitles();
String[] parsedTitles = titles.get(0).getValues().split(";");
String[] parsedValues = items.get(position).getValues().split(";");
for (int i = 0; i < parsedValues.length; i++) {
View holder = inflater.inflate(R.layout.parsed_csv_list_view_subitem, parent, false);
TextView textViewTitles = (TextView) holder.findViewById(R.id.parsed_csv_list_view_subitem_text_title);
TextView textViewValues = (TextView) holder.findViewById(R.id.parsed_csv_list_view_subitem_text_value);
textViewTitles.setText(parsedTitles[i]);
textViewValues.setText(parsedValues[i]);
((LinearLayout) convertView).addView(holder);
}
return ((View)convertView);
}
我必须将我的convertView转换为LinearLayout,因为只有converView没有addView方法。好吧,这是一个糟糕的但是它有效...有一些问题。 现在,在滚动时,似乎列表中的项目数量因某种原因而增加。有人可以解释一下为什么会发生这种情况以及如何解决它?
来自 JonasCz的完整工作解决方案:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = inflater.inflate(R.layout.parsed_csv_list_view_main_item, parent, false);
} else {
((LinearLayout) convertView).removeAllViews();
}
RealmResults<ParsedCSV> titles = parentFragment.getParsedCSVtitles();
String[] parsedTitles = titles.get(0).getValues().split(";");
String[] parsedValues = items.get(position).getValues().split(";");
for (int i = 0; i < parsedValues.length; i++) {
View holder = inflater.inflate(R.layout.parsed_csv_list_view_subitem, parent, false);
TextView textViewTitles = (TextView) holder.findViewById(R.id.parsed_csv_list_view_subitem_text_title);
TextView textViewValues = (TextView) holder.findViewById(R.id.parsed_csv_list_view_subitem_text_value);
textViewTitles.setText(parsedTitles[i]);
textViewValues.setText(parsedValues[i]);
((LinearLayout) convertView).addView(holder);
}
return ((View)convertView);
}
答案 0 :(得分:3)
在适配器的getView()
方法中,您为列表项扩展了主XML布局。然后你应该遍历你的数据(数组,光标,无论如何)和你想要的每个额外的LinearLayout,创建它,添加TextViews,设置它们的文本,并将它添加到你从XML膨胀的主布局。见this answer。
如果您正在重新使用convertView参数中的视图(您应该这样做),那么在使用它之前还必须确保您的主布局为空,您可以使用myMainListItemLayout.removeAllViews()
另一种方法可能是将listView放在listview中。 (可能不是一个好主意。)
修改:尝试更改代码,如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = inflater.inflate(R.layout.parsed_csv_list_view_main_item, parent, false);
} else {
((LinearLayout) convertView).removeAllViews();
}
RealmResults<ParsedCSV> titles = parentFragment.getParsedCSVtitles();
String[] parsedTitles = titles.get(0).getValues().split(";");
String[] parsedValues = items.get(position).getValues().split(";");
for (int i = 0; i < parsedValues.length; i++) {
View holder = inflater.inflate(R.layout.parsed_csv_list_view_subitem, parent, false);
TextView textViewTitles = (TextView) holder.findViewById(R.id.parsed_csv_list_view_subitem_text_title);
TextView textViewValues = (TextView) holder.findViewById(R.id.parsed_csv_list_view_subitem_text_value);
textViewTitles.setText(parsedTitles[i]);
textViewValues.setText(parsedValues[i]);
((LinearLayout) convertView).addView(holder);
}
return ((View)convertView);
}
它很丑陋,可能有点慢,但它确实有效。