gpt4 book ai didi

android - 动态更新ListView的 View 类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:09 24 4
gpt4 key购买 nike

我已经创建了一个自定义适配器实现。我在这个适配器中也有一些不同的 View 类型。

我需要在运行时替换适配器的一些 View 。 Romain Guy 说“...动态更改 View 类型计数是一个很大的错误”(参见 ArrayAdapter and ListView - ArrayIndexOutOfBoundsException)。当 View 类型计数动态变化时,执行此操作的正确方法是什么?

适配器代码:

...
private List<Class<?>> itemTypes = new ArrayList<Class<?>>(20);

private void initList(List<Object> items) {
itemTypes = new ArrayList<Class<?>>(20);
positionSection = new SparseArray<Integer>(items.size());

int count = 0;
int sectionIndex = -1;
for (Object object : items) {
Class<?> currentClass = object.getClass();
if (object instanceof String) {
sectionIndex = count;
}
if (!itemTypes.contains(currentClass)) {
itemTypes.add(currentClass);
}
positionSection.put(count, sectionIndex);
count++;
}
}
@Override
public int getItemViewType(int position) {
return itemTypes.indexOf(items.get(position).getClass());
}

@Override
public int getViewTypeCount() {
int size = itemTypes.size();
return size == 0 ? 1 : size;
}

@Override
public void notifyDataSetChanged() {
initList(items);
super.notifyDataSetChanged();
}
...

我在更改数据后更新了我的项目类型列表,但它没有按预期工作。

上述代码导致 ArrayIndexOutOfBounds 异常:

10-21 20:18:16.231: E/AndroidRuntime(4475): java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
10-21 20:18:16.231: E/AndroidRuntime(4475): at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6437)
10-21 20:18:16.231: E/AndroidRuntime(4475): at android.widget.ListView.layoutChildren(ListView.java:1559)
10-21 20:18:16.231: E/AndroidRuntime(4475): at android.widget.AbsListView.onLayout(AbsListView.java:2102)
10-21 20:18:16.231: E/AndroidRuntime(4475): at se.davison.sodatools.widget.SectionListView.onLayout(SectionListView.java:147)
10-21 20:18:16.231: E/AndroidRuntime(4475): at android.view.View.layout(View.java:13754)
10-21 20:18:16.231: E/AndroidRuntime(4475): at android.view.ViewGroup.layout(ViewGroup.java:4362)

最佳答案

根据 https://stackoverflow.com/users/493939/luksprog 的建议解决

更改了这些方法并且没有在 initList 中创建新的 itemTypes 实例

@Override
public int getViewTypeCount() {
return 20;
}

关于android - 动态更新ListView的 View 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000708/

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