我是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>
有人能帮我填一下吗?我不知道我做错了什么。非常感谢任何帮助!
答案 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;当你想要引用你的包中的东西时,它需要像项目中的无处不在,因为那是包名。不允许混合搭配。
我已经对它进行了测试,它可以在我的模拟器上运行。