gpt4 book ai didi

android - 如何以编程方式将多个自定义 linearLayouts 添加到 listView 项目

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:28 26 4
gpt4 key购买 nike

我有一个非常恼人的问题。我的任务是添加多个带有自定义 XML 模板的 LinearLayouts(我不知道可能有多少布局),其中(每个)有 2 个 TextViews 到 1 个 ListView 项目中。像这样:enter image description here

是否可以在 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);
}

最佳答案

在适配器的 getView() 方法中,您为列表项扩充主 XML 布局。然后你应该循环遍历你的数据(数组、游标,等等)并为你想要的每个额外的 LinearLayout 创建它,并添加 TextViews,设置它们的文本,并将它添加到你从 XML 膨胀的主布局。参见 this answer .

如果您要重新使用来自 convertView 参数的 View (您应该这样做),您还必须确保在使用它之前您的主布局是空的,您可以使用 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);
}

它很丑,而且可能有点慢,但它确实有效。

关于android - 如何以编程方式将多个自定义 linearLayouts 添加到 listView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28429906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com