Android:Fragments - java.lang.RuntimeException:无法实例化活动ComponentInfo

时间:2013-05-23 15:09:20

标签: android android-fragments android-fragmentactivity

我正在尝试使用片段来创建一个简单,持久的导航栏。问题是我得到以下错误输出。

05-23 14:58:02.861: E/AndroidRuntime(882): FATAL EXCEPTION: main
05-23 14:58:02.861: E/AndroidRuntime(882): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo    {org.childrensmuseum.visittcmindy/org.childrensmuseum.visittcmindy.MainActivity}: java.lang.ClassNotFoundException: org.childrensmuseum.visittcmindy.MainActivity
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1879)
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.os.Looper.loop(Looper.java:137)
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.app.ActivityThread.main(ActivityThread.java:4340)
05-23 14:58:02.861: E/AndroidRuntime(882):  at java.lang.reflect.Method.invokeNative(Native Method)
05-23 14:58:02.861: E/AndroidRuntime(882):  at java.lang.reflect.Method.invoke(Method.java:511)
05-23 14:58:02.861: E/AndroidRuntime(882):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-23 14:58:02.861: E/AndroidRuntime(882):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-23 14:58:02.861: E/AndroidRuntime(882):  at dalvik.system.NativeStart.main(Native Method)
05-23 14:58:02.861: E/AndroidRuntime(882): Caused by: java.lang.ClassNotFoundException: org.childrensmuseum.visittcmindy.MainActivity
05-23 14:58:02.861: E/AndroidRuntime(882):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
05-23 14:58:02.861: E/AndroidRuntime(882):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
05-23 14:58:02.861: E/AndroidRuntime(882):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
05-23 14:58:02.861: E/AndroidRuntime(882):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1870)
05-23 14:58:02.861: E/AndroidRuntime(882):  ... 11 more

我的主要活动如下:

package org.childrensmuseum.visittcmindy;

import android.graphics.Color;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.widget.ImageButton;

public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getWindow().setFormat(PixelFormat.RGBA_8888);
    findViewById(R.id.NavigationBar).getBackground().setDither(true);
    ImageButton homeButton = (ImageButton) findViewById(R.id.home_button);
    homeButton.setColorFilter(Color.argb(255, 90, 179, 0));
}

@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;
}


}

My Fragment看起来像这样:

package org.childrensmuseum.visittcmindy;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MainNavigation extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    return inflater.inflate(R.layout.navigation_main, container, false);
}
}

最后,我的主要活动xml文件如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<ImageView 
    android:id="@+id/HomeBackground"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/homescreen_desc"
    android:src="@drawable/homescreen"
    android:scaleType="centerCrop"
    />
<fragment android:name="org.childrensmuseum.visittcmindy.MainNavigation"
    android:id="@+id/NavigationBar"
    android:layout_gravity="bottom" />

</RelativeLayout>

我错过了什么?

1 个答案:

答案 0 :(得分:1)

编辑试图使其成为这个问题的一般答案(在这种情况下,正确答案由@Raghunandan提供):

嗯......所以你的MainActivity“丢失了”(ClassNotFoundException:org.childrensmuseum.visittcmindy.MainActivity):

1.-可能是Eclipse(或您正在使用的任何IDE)构建问题。清理项目并重建它和/或重新启动Eclipse。

2.-您的Manifest文件可能存在问题。在“AndroidManifest.xml”中添加您的活动,确保正确编写您的包和活动名称(检查上限)。一个例子可能是:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.childrensmuseum.visittcmindy">
    <application>
        <activity android:name=".MainActivity"></activity>
    </application>
    <uses-sdk android:minSdkVersion="7" />
</manifest>

3.-似乎不是您的情况,但有时外部库未正确包含在构建路径中。您必须将第三方库放在“libs”文件夹中并重新引用它们(右键单击,属性,Java构建路径,库,添加Jar ...)。

必须在Android Manifest中声明共享库,例如地图库,它不是标准Android库的一部分。打开AndroidManifest.xml文件,并将以下内容添加为元素的子元素:

<uses-library android:name="com.google.android.maps"/>

4.- @Raghunandan提供了解决方案here,以防您更新到Android SDK Tools Rev 22。

Right click on your project goto properties. Java Build Path. Choose Order export tab. Make sure that Android Private Libraries is selected. If you have referenced library project. do the same for the library project also. Clean and Build.