java - 尝试将 FrameLayout 转换为子类时出现 ClassCastException

标签 java android

在 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/

相关文章:

android - Visual Studio : Rescource. ID。找不到我的按钮

java - android中Asynctask内的json解析错误

Android调试 key ?

java - 空目标节点中结果的 XPath 评估

java - 如何使用pdfbox在java中的pdf页面的特定位置绘制字符串?

java - 两个不同子类分配的区别

android - Spek + Retrofit api 测试崩溃

java - 从 HTML 字符串中提取 URL

java - 如何将本地.jar文件依赖添加到build.gradle文件?

Android/9-patch PNG : What, 如果我需要像 11-patch PNG 这样的东西?