Android片段无法转换为android.app.Activity

时间:2014-11-25 03:39:11

标签: android android-fragments fragment

前几天我收到用户报告的错误,但是发生的事情令人难以置信。

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.inthub.greenfly/com.inthub.greenfly.view.fragment.MyProfileFragment}: java.lang.ClassCastException: com.inthub.greenfly.view.fragment.MyProfileFragment cannot be cast to android.app.Activity
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
   at android.app.ActivityThread.access$600(ActivityThread.java:141)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:5041)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
   at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.ClassCastException: com.inthub.greenfly.view.fragment.MyProfileFragment cannot be cast to android.app.Activity
   at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
   at android.app.ActivityThread.access$600(ActivityThread.java:141)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:5041)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
   at dalvik.system.NativeStart.main(NativeStart.java)

我知道你的第一个想法是“你必须使用startActivity或其他东西启动片段”。我在一个地方启动这个片段:

FragmentTransaction ft = getFragmentManager().beginTransaction();
                    ft.replace(R.id.fragment, new MyProfileFragment());
                    ft.commit();

我一直无法弄清楚这是如何从一项活动开始的,也无法重现它。任何想法继续寻找?

我的课程扩展了Fragment而不是FragmentActivity。

我有一个onCreate,我删除了一些代码以保持简短:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getActivity().getActionBar() != null) {
            getActivity().getActionBar().setTitle(R.string.myprofile);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, 
            ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my_profile, container, false);

        .... tons of lines setting up my view ....
    }

我将清单文件中的片段声明为活动。我正在读这可能是不正确的。如果这是问题的根源,为什么我无法跨多个设备重现错误?

<activity
   android:name="com.inthub.greenfly.view.fragment.MyProfileFragment"
   android:screenOrientation="portrait" >
</activity>

更新,只是为了清楚。我的清单中有不正确的活动行很长一段时间,从未遇到过这个错误。据其他用户通过Crashlytics报道。我花了数百个小时在多个设备上开发和测试,而没有遇到它。如果它像删除线一样简单,为什么我无法重现它?

0 个答案:

没有答案