【发布时间】:2011-11-20 19:39:07
【问题描述】:
这有点像在黑暗中拍摄,但也许我犯了一个明显的错误; 我在 main.xml 中定义了一个 LinearLayout,其 ID 为“@+id/imageListContainer”。我的 main.xml 中没有其他内容,LinearLayout 是完全简单的(因为 eclipse 从 GUI 编辑器为您插入它)。
<LinearLayout
android:id="@+id/imageListContainer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
</LinearLayout>
然后我想使用以下代码动态填充 LinearLayout:
LinearLayout imageContainer = (LinearLayout)findViewById(R.id.imageListContainer);
来自应用程序 onCreate() 回调函数。
这曾经工作得很好。然而,当我开始在这里和那里添加代码片段(主要是在其他活动中)时,它在某些时候停止工作,现在我一直通过 findViewById() 返回一个空指针。我尝试重新生成 R.java,重命名 LinearLayout(以确保我可以控制访问它的位置;但它只能从一个地方访问)。我尝试将代码放入 onStart() 中,认为 onCreate 可能运行得太早,创建了竞争条件,但也没有运气。我还确保 LinearLayout 确实被称为“imageListContainer”,它就是(否则生成的 R.java 将是错误的并且 javac 无论如何都会抱怨)并且任何地方都没有重复的“imageListContainer”对象。
我不知道这可能是什么原因,所以我很感激任何建议或猜测。
这是堆栈跟踪:
E/AndroidRuntime( 327): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 327): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.PictureListView/com.company.PictureListView.PictureListView.PictureListActivity}: java.lang.NullPointerException
E/AndroidRuntime( 327): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime( 327): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime( 327): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime( 327): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime( 327): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 327): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 327): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 327): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 327): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 327): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime( 327): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime( 327): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 327): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 327): at com.company.PictureListView.PictureListActivity.updateMainActivityScreen(PictureListActivity.java:50)
E/AndroidRuntime( 327): at com.company.PictureListPictureListActivity.onCreate(PictureListActivity.java:38)
E/AndroidRuntime( 327): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 327): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
PS:我忘了说,我也调用了 setContentView(R.layout.main),所以这也不是问题。
PSS:我尝试在 GUI 中添加一个按钮,然后在该按钮的回调中调用包含 findViewById() 的代码,这很有效!这让我回到了可能存在一些竞争条件的想法。
【问题讨论】:
-
你调用 setContentView(R.layout.main) 了吗?如果不是,您必须使用 LayoutInflater 来膨胀 xml 布局
-
你在活动中调用了“setContentView”吗?
-
这就是你在 main.xml 中得到的全部内容吗?如果是这种情况,您可能会在第一行中缺少
<?xml version="1.0" encoding="utf-8"?>和 LinearLayout 中的xmlns:android="http://schemas.android.com/apk/res/android"。如果没有,请告诉我们您的onCreate和updateMainActivityScreen。 -
你试过清理项目+刷新项目+构建项目+再次运行吗?
-
清理项目 = 选择你的项目,然后项目菜单 -> 清理...
标签: android android-layout android-widget android-linearlayout