Android 具有不同项和视图持有者的ListView导致ClassCastException

Android 具有不同项和视图持有者的ListView导致ClassCastException,android,listview,adapter,classcastexception,Android,Listview,Adapter,Classcastexception,我有一个列表视图,它应该有四种不同类型的项目。我搜索它,找到了不同的解决方案,这是可能的,并试图做我的东西,就像其他人做的。我创建了不同的视图持有者(每种类型一个)。当ListView第一次出现时,一切正常。但是当我开始滚动时,我得到一个classCastException。 原因很明显: holder = (FeedViewHolder) convertView.getTag(); 我的适配器试图通过从convertView获取标记(如果它不为null)来获取ViewHolder。但此Vie

我有一个列表视图,它应该有四种不同类型的项目。我搜索它,找到了不同的解决方案,这是可能的,并试图做我的东西,就像其他人做的。我创建了不同的视图持有者(每种类型一个)。当ListView第一次出现时,一切正常。但是当我开始滚动时,我得到一个classCastException。 原因很明显:

holder = (FeedViewHolder) convertView.getTag();
我的适配器试图通过从convertView获取标记(如果它不为null)来获取ViewHolder。但此ViewHolder似乎是上一个项目的ViewHolder,因此无法铸造


我搜索了StackOverflow和Google,但所有的例子似乎都很有效,因为它们对不同的项目使用相同或相当相等的视图持有者。但是我的对象彼此之间确实不同,需要不同的视图持有者。有人能帮我解决这个问题吗?

为ListView定义项目视图类型,并根据实际视图类型转换ViewHolder,如回答中的代码所示:

好的,一位同事刚刚帮助了我:
我没有实现getViewTypeCount方法。就这样。Android系统不知道有不同的视图类型,因为我没有定义它们。无论如何都要感谢dmaxi

就是这样做的,它崩溃了。正如我已经说过的,它正在崩溃,因为适配器试图将类型A的ViewHolder转换为类型B的ViewHolder,这是不可能的,因为它们彼此不同。我看不出以前回答这个问题的方法在哪里处理这个问题。请查看我在上的帖子