我不认为自己是一位经验丰富的开发人员,但我可以说我有足够的经验来避免ClassCastException
视图:我知道哪个视图与哪个ID相关联在我的布局中。
发生的事情是我在以下方面遇到了愚蠢的崩溃:
TextView v = (TextView) view.findViewById(R.id.my_text_view);
ClassCastException: cannot cast AppCompatImageView to TextView
在应用的不同部分,但不是以可重现的方式(每次我执行该特定操作时都不会发生这种情况)。这让我发疯了!
// IN A AppCompatDialogFragment
// R.layout.sheet_menu is a frame with only two childs:
// a TextView and a RecyclerView.
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.sheet_menu, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
titleView = (TextView) view.findViewById(R.id.menu_sheet_title);
list = (RecyclerView) view.findViewById(R.id.menu_sheet_list);
// CLASSCASTEXCEPTION! Cannot cast AppCompatTextView to RecyclerView!
}
另一个:
// IN A RECYCLERVIEW ADAPTER
// Inflating the view holder layout with
// View.inflate(mContext, R.layout.editable_story, null);
private class EditableStoryHolder extends PrimaryHolder {
public EditableStoryHolder(View itemView) {
super(itemView);
...
likes = (TextView) itemView.findViewById(R.id.likes_count);
// CLASSCASTEXCEPTION! Cannot cast AppCompatImageView to TextView
}
我从不明确地调用removeView
或其他任何东西
我正在导入正确的包R
类
我正在使用的ID在所有项目中都是唯一,我很确定它们不会在我的任何依赖项中使用
那么,发生了什么?为什么findViewById会返回错误的孩子?我正在使用支持库v.23.2.1在API23上进行测试。这是一个非常新的问题。 appcompat布局inflater出了什么问题?
答案 0 :(得分:0)
有时生成的R文件变得不同步(不确定为什么,但我经常遇到这个问题)
只需选择Build - >清理项目即可。清洁项目
这应该重新生成R文件并解决问题,每次向布局添加新视图时都可能需要清理项目
答案 1 :(得分:0)
您是否引入了会影响LayoutInflater或相关工厂的库?确保充气机创建正确的视图。我认为您可以调试LayoutInflater.java以确保一切正常。