Source Not Found main.xml Eclipse

时间:2013-04-25 23:38:53

标签: android eclipse

我是android开发的初学者并遇到了问题。我正在制作一个简单的应用程序,在列表视图中显示总统。但是当我尝试在模拟器上运行它时,ir会收到此错误:未找到源.net.learn2develop.Listfragmentexample.ListFragmentExampleActivity。这是我的java文件代码:

package net.learn2develop.Listfragmentexample;

import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class Fragment1 extends ListFragment {
String[] presidents = {
        "Dwight D. Eisenhower",
        "John F. Kennedy",
        "Lyndon B. Johnson",
        "Richard Nixon",
        "Gerald Ford",
        "Jimmy Carter",
        "Ronald Reagen",
        "George H. W. Bush",
        "Bill Clinton",
        "George W. Bush",
        "Barack Obama"
};

@Override
public View onCreateView(LayoutInflater inflater,
        ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment1, container, false);
}
    @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, presidents));
    }
        public void onListItemClick(ListView parent, View v,
                int position, long id)
        {   
            Toast.makeText(getActivity(),
                    "You have selected item : " + presidents[position],
                    Toast.LENGTH_SHORT).show();
        }
    }

以下是main.xml的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >

<fragment
    android:id="@+id/fragment1"
    android:name="net.learn2develop.ListFragmentExample.Fragment1"
    android:layout_weight="0.5"
    android:layout_width="0dp"
    android:layout_height="200dp" />

<fragment
    android:id="@+id/fragment2"
    android:name="net.learn2develop.ListFragmentExample.Fragment1"
    android:layout_weight="0.5"
    android:layout_width="0dp"
    android:layout_height="300dp" />

</LinearLayout>

这是fragment1.xml的代码:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ListView
    android:id="@id/android:list"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:drawSelectorOnTop="false"/>
</LinearLayout>

这是我的Logcat追踪:

[2013-04-25 18:31:55 - ListFragmentExample] Android Launch!
[2013-04-25 18:31:55 - ListFragmentExample] adb is running normally.
[2013-04-25 18:31:55 - ListFragmentExample] Performing           net.learn2develop.Listfragmentexample.ListFragmentExampleActivity activity launch
[2013-04-25 18:31:55 - ListFragmentExample] Automatic Target Mode: using existing  emulator 'emulator-5554' running compatible AVD 'Android_4.0'
[2013-04-25 18:31:55 - ListFragmentExample] Uploading ListFragmentExample.apk onto device 'emulator-5554'
[2013-04-25 18:31:56 - ListFragmentExample] Installing ListFragmentExample.apk...
[2013-04-25 18:32:03 - ListFragmentExample] Success!
[2013-04-25 18:32:03 - ListFragmentExample] Starting activity net.learn2develop.Listfragmentexample.ListFragmentExampleActivity on device emulator-5554
[2013-04-25 18:32:05 - ListFragmentExample] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=net.learn2develop.Listfragmentexample/.ListFragmentExampleActivity }
[2013-04-25 18:32:06 - ListFragmentExample] Attempting to connect debugger to 'net.learn2develop.Listfragmentexample' on port 8666

这是我的清单代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.learn2develop.Listfragmentexample"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="14" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="net.learn2develop.Listfragmentexample.ListFragmentExampleActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

</manifest>

有人能帮我填一下吗?我不知道我做错了什么。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

正确的语法是@android:id/list,而不是@id/android:list

另外,我写的是listfragmentexample而不是Listfragmentexample,而不是ListFragmentExample。您的main.xml文件和清单文件之间的包名称大小写确实不一致。此外,就个人而言,我甚至根本不会把这个词弄清楚。

这应该照顾你的错误。

但就个人而言,我还要编写".ListFragmentExampleActivity"而不是"net.learn2develop.Listfragmentexample.ListFragmentExampleActivity"来简化清单。它真的不需要那么复杂。我建议的最后一个改变不会解决任何问题,只是使清单更具可读性。

<强>更新

从你的聊天中,看起来Stonebird似乎认识到包名称引用的不一致大写,只是这个不一致的大写需要更正,而不仅仅是清单活动android:name。

在清单活动android:name中,请按照我上面建议的那样做。写".ListFragmentExampleActivity"而不是"net.learn2develop.Listfragmentexample.ListFragmentExampleActivity"

然后在Eclipse的项目浏览器窗格中,将鼠标放在包名称上,右键单击并选择:

Refactor > Rename改为"net.learn2develop.listfragmentexample"而不是"net.learn2develop.Listfragmentexample"请务必选中“更新所有参考文件”复选框并预览更改(不要担心以后出现的错误)那还需要做一些工作)。如果它要求您更新配置启动文件,也请接受它。将所有包名称转换为小写(ClassName部分除外)是Java中的一个好习惯,因为那时您不需要开始记住您在什么上使用的特定情况。

之后,在清单的第二行或第三行,确保编写"net.learn2develop.listfragmentexample"而不是"net.learn2develop.Listfragmentexample"(我不认为Eclipse Refactor命令会处理那个)。

然后在你的main.xml中写一下 "net.learn2develop.listfragmentexample.Fragment1"代替"net.learn2develop.ListFragmentExample.Fragment1" 并且写"net.learn2develop.listfragmentexample.Fragment2"而不是"net.learn2develop.ListFragmentExample.Fragment2"(通常,Eclipse Refactor负责重命名这些属性,但在这种情况下它并不是因为在这种情况下大写错误甚至与你的第一个大写错误不一致,所以在进行搜索和替换时不会接受这一点)

最后,在所有你的java文件中,确保写入:

package net.learn2develop.listfragmentexample;而不是

package net.learn2develop.Listfragmentexample;(这个部分应该由Eclipse处理,但这是你应该仔细检查以防万一)。

之后,在每个java文件中执行Ctrl-shift-o(以组织导入)。如果你在正确重置软件包名称之前过早地执行了这一步骤,那么它将导入android.R( NOT 你想要的东西)。确保import android.R; 出现在您的java文件中的任何位置。如果它在那里,删除该行,并执行Ctrl-shift-o(组织导入),直到您导入自己的R并且 android.R

之后,用鼠标选择Project > Clean...Source > Clean...(我忘记了哪个菜单)。如果Eclipse出错,请打开Eclipse Error View窗格以确保您没有错过任何其他需要更改以前包名称的地方。在“错误视图”窗格中,您可以双击有问题的每个错误,将您带到Eclipse认为错误所在的位置。

答案 1 :(得分:0)

在阅读完代码后,我改变了所有&#34; Listfragmentexample&#34;到&#34; ListFragmentExample&#34;。这发生在多个文件中。

名称&#34; ListFragmentExample&#34;表示您的包名称,并且需要在项目文件中保持一致。如果你想要它是&#34; Listfragmentexample&#34;当你想要引用你的包中的东西时,它需要像项目中的无处不在,因为那是包名。不允许混合搭配。

我已经对它进行了测试,它可以在我的模拟器上运行。