【问题标题】:Error by starting FragmentActivity启动 FragmentActivity 时出错
【发布时间】:2013-05-18 21:13:37
【问题描述】:

我想将我的项目从 Activity 更改为 FragmentActivity。第一步是创建片段:

public class Frag1 extends Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater
                .inflate(R.layout.detail_fragment, container, false);
        return view;
    }

}

detail_fragment 是一个带有 TextView 的简单 LinearLayout

第二步是(在我的 SplashScreen 之后)将父类设为 FragmentActivity:

public class TestFrag extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.frag_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

R.layout.frag_main:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/frag"
    android:name=".fragments.Frag1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

在我的 SplashScreen 上说知道:

Intent myInt = new Intent(this, TestFrag.class);
startActivity(myInt);

但我总是收到这些错误:

05-18 23:09:51.543: W/dalvikvm(28644): Unable to resolve superclass of Lws/stefma/projectname/TestFrag; (20)
05-18 23:09:51.543: W/dalvikvm(28644): Link of class 'Lws/stefma/projectname/TestFrag;' failed
05-18 23:09:51.543: E/dalvikvm(28644): Could not find class 'ws.stefma.projectname.TestFrag', referenced from method ws.stefma.projectname.Activity_Login_Registration.onCreate
05-18 23:09:51.543: W/dalvikvm(28644): VFY: unable to resolve const-class 94 (Lws/stefma/projectname/TestFrag;) in Lws/stefma/projectname/Activity_Login_Registration;
05-18 23:09:51.543: D/dalvikvm(28644): VFY: replacing opcode 0x1c at 0x000b
05-18 23:09:51.583: D/AndroidRuntime(28644): Shutting down VM
05-18 23:09:51.583: W/dalvikvm(28644): threadid=1: thread exiting with uncaught exception (group=0x41850930)
05-18 23:09:51.593: E/AndroidRuntime(28644): FATAL EXCEPTION: main
05-18 23:09:51.593: E/AndroidRuntime(28644): java.lang.NoClassDefFoundError: ws.stefma.projectname.TestFrag
05-18 23:09:51.593: E/AndroidRuntime(28644):    at ws.stefma.projectname.Activity_Login_Registration.onCreate(Activity_Login_Registration.java:30)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.app.Activity.performCreate(Activity.java:5104)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.os.Looper.loop(Looper.java:137)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at android.app.ActivityThread.main(ActivityThread.java:5041)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at java.lang.reflect.Method.invokeNative(Native Method)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at java.lang.reflect.Method.invoke(Method.java:511)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-18 23:09:51.593: E/AndroidRuntime(28644):    at dalvik.system.NativeStart.main(Native Method)

我不知道为什么... 对此感到困惑: 如果我从FragmentActivity 回到Activity 一切运行良好,没有错误!!!

我的 AndroidManifest 中也有这些:

<activity android:name="ws.stefma.projectname.TestFrag" />

更新:

我已导入support-v4 libary。 我的AndroidManifest 被声明为minSdk="14" 和targetSdk="17"。 因为我使用了我在 Fragment-Class 上导入的 support-v4

import android.app.support.v4.Fragment

现在我把它改成了

import android.app.Fragment

它似乎工作......

我还必须将FragmentActivity 更改为Activity。因为FragmentActivity 只是支持 v4 包的一个类!

更新 2 - 找到解决方案: Here is the solution

【问题讨论】:

  • 你的minSdk、targetSdk是什么?你在使用兼容包吗?
  • 我有 minSdk="14" 和 tagetSdk="17"。我还导入了 Support-v4 包并希望使用它们...
  • 它没有意义,因为 minSdk 是 14。如果你的 minSdk 小于 11,你将需要这个库。片段来自 API v11。

标签: android android-activity noclassdeffounderror android-fragmentactivity


【解决方案1】:

将 R.layout.frag_main 更改为:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/LinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <fragment
           android:id="@+id/fragment1"
           android:name="ws.stefma.projectname.Frag1"
           android:layout_width="match_parent"
           android:layout_height="wrap_content" />

    </LinearLayout>

【讨论】:

  • 什么都不做。同样的错误。我已经更新到 SDK rev。 22 和支持库修订。 13...也许有错误?
  • 如果 Stefan 将 API 版本更改为 8,它将无法正常工作。使用 FrameLayout 并将片段加载到此占位符到 Activity.onCreate 中的最佳方法。
  • 对于 API 版本 8,您需要支持库。我也在使用 API 8,静态片段工作得很好。
【解决方案2】:

我认为您不需要使用 support-v4 库。请告诉我你为什么使用那个库?我看到 min sdk 是 14,在这种情况下使用 sopport-v4 是没用的。

请检查 ws.stefma.projectname 包,因为 logcat 说 ws.stefma.projectname.TestFrag 不存在。

【讨论】:

  • 我想使用新的 DrawerLayout (x.co/17W32)。但它似乎只在 support-v4 上可用......我怎样才能在没有错误的情况下导入它?!
【解决方案3】:

好的,这就是解决方案。 我不确切知道 folling 代表什么以及它是什么,但它运行并且在这些解决方法之后我现在有错误:

Close eclipse -> remove support-V4 -> open eclipse -> right click on your project -> AndroidTools -> Add Support Libary -> right click on your project -> Properties -> Choose 'Order and Export' -> @98764 @ -> Select All -> Click 'ok' -> Project -> Clean -> Run and stay happy!

【讨论】:

  • 请检查 minSdk 版本。
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多