【问题标题】:Caused by: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to com.appeaser.sublimepickerlibrary.SublimePicker原因:java.lang.ClassCastException: android.widget.FrameLayout 不能转换为 com.appeaser.sublimepickerlibrary.SublimePicker
【发布时间】:2018-03-01 07:21:59
【问题描述】:

我正在尝试在 FrameLayout 中加载片段,但出现以下异常/崩溃

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:title="@string/app_name"
            app:titleTextColor="@color/white"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <com.appeaser.sublimepickerlibrary.SublimePicker
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/appBarLayout"
        android:layout_above="@+id/bottom_navigation" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_CreateEvent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/fab_margin_bottom"
        android:layout_marginRight="@dimen/fab_margin_right"
        android:clickable="true"
        android:src="@drawable/plus"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:backgroundTint="@color/colorPrimary"
        app:rippleColor="@color/colorPrimaryDark" />

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:itemBackground="@color/colorPrimary"
        app:itemIconTint="@color/white"
        app:itemTextColor="@color/white"
        app:menu="@menu/bottom_navigation_main" />

</RelativeLayout>

MainActivity.java

FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        DatePickerFragment datePickerFragment = new DatePickerFragment();
        fragmentTransaction.replace(R.id.content_frame, datePickerFragment);
        fragmentTransaction.commit();

错误日志

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appeaser.sublimepicker/com.appeaser.sublimepicker.MainActivity}: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to com.appeaser.sublimepickerlibrary.SublimePicker
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                                                  at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:105)
                                                                                  at android.os.Looper.loop(Looper.java:164)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
                                                                               Caused by: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to com.appeaser.sublimepickerlibrary.SublimePicker
                                                                                  at com.appeaser.sublimepicker.DatePickerFragment.onCreateView(DatePickerFragment.java:102)
                                                                                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261)
                                                                                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
                                                                                  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
                                                                                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
                                                                                  at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                                                                                  at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
                                                                                  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
                                                                                  at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
                                                                                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
                                                                                  at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)
                                                                                  at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)
                                                                                  at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
                                                                                  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)
                                                                                  at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
                                                                                  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
                                                                                  at android.app.Activity.performStart(Activity.java:6992)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
                                                                                  at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:105) 
                                                                                  at android.os.Looper.loop(Looper.java:164) 
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:6541) 
                                                                                  at java.lang.reflect.Method.invoke(Native Method) 
                                                                                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

此外,我正在我的应用程序中自定义以下库代码。

https://github.com/vikramkakkar/SublimePicker

请帮帮我。

【问题讨论】:

  • 您发布的错误信息中有什么不清楚的地方?
  • 不清楚的是,如果可能或任何解决方法,如何使向上转换可行
  • FrameLayout 不是 SublimePickerSublimePickerFramelayout 。您为什么不按照提供的示例进行操作。
  • 我只自定义那个示例代码
  • DatePickerFragmentonCreateView() 方法中,您以某种方式将FrameLayout 转换为SublimePicker。看那个方法。您发布的代码和布局可能无关紧要。

标签: android android-fragments fragment fragmenttransaction fragmentmanager


【解决方案1】:

将您的框架布局更改为

<com.appeaser.sublimepickerlibrary.SublimePicker
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/appBarLayout"
        android:layout_above="@+id/bottom_navigation" />

【讨论】:

  • 添加后我得到这个原因:java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。
  • 请分享您的完整activity_main.xml
  • 确保您在 DatePickerFragment 中返回了正确的视图
  • 片段仅在 xml 中包含 SublimePicker
  • 请检查您的片段并确保您已返回正确的视图,如果可能请分享片段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 2016-05-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多