-1

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

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


}

我的片段看起来像这样:

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>

我错过了什么?

4

1 回答 1

1

已编辑以尝试使其成为此问题的一般答案(在这种情况下,@Raghunandan 提供了正确答案):

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

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

2.- 您的清单文件可能有问题。在您的“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...)。

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

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

4.- @Raghunandan 在这里提供了一个解决方案,以防您已更新到 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.
于 2013-05-23T15:20:25.307 回答