前几天我收到用户报告的错误,但是发生的事情令人难以置信。
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报道。我花了数百个小时在多个设备上开发和测试,而没有遇到它。如果它像删除线一样简单,为什么我无法重现它?