在 Android 中,我有一个 ListFragment。在 ListFragment 上,我想存储一个自定义 View 对象,我计划在其上做一些进一步的工作。由于从 OnCreateView 返回的 View 对象类型看起来是 FrameLayout,因此我定义了从 FrameLayout 派生的自定义 View 对象。
所以,基本上我的自定义 View 类看起来像:
public class MyCustomView extends FrameLayout {
public MyCustomView(Context context) { super(context); }
public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); }
public MyCustomView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }
public MyCustomView(Context context, AttributeSet attrs, int defStyle, int defStyleRes) { super(context, attrs, defStyle, defStyleRes); }
}
我的 ListFragment 实现中的 OnCreateView 方法如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1,
new String[]{ "one", "two", "three"});
setListAdapter(adapter);
MyCustomView myView = (MyCustomView)super.onCreateView(inflater, container, savedInstanceState);
return myView;
}
但是使用这段代码我得到一个异常: java.lang.ClassCastException: android.widget.FrameLayout 无法转换为 ...myApp.MyCustomView
我该如何解决这个问题?
最佳答案
您没有在任何地方使用 MyCustomView
。
当您调用super.onCreateView(inflater,container,savedInstanceState);
时,您将让基类(ListFragment
)处理为您的 fragment 创建布局,并且框架的 ListFragment
类不知道您创建了 MyCustomView
或如何使用它。
相反,您需要创建一个使用 MyCustomView
的布局 XML 文件,并改为扩充该布局。你最终会得到这样的结果:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1,
new String[]{ "one", "two", "three"});
setListAdapter(adapter);
View layout = inflater.inflate(R.layout.list_fragment_layout, container, false);
MyCustomView myView = (MyCustomView) layout.findViewById(R.id.custom_view_id);
return layout;
}
关于java - 尝试将 FrameLayout 转换为子类时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31926750/