我有一个按钮,我想经常更改它的值,所以我的Activity有一个私有变量:
private Button p1_button = (Button)findViewById(R.id.firstbut);
这个简单的行使我的应用程序崩溃。如果我放入onCreate它可以工作,我可以与按钮交互(更改文本等)。
编辑:我想我找到了原因。我应该初始化AFTER setcontentview? 编辑:谢谢你的建设性答案。我现在有一个不同的问题,我删除了初始化,我在onCreate上做了它并且它工作(但我把p1_button声明保持为私有字段)。但是当我尝试用我的活动的另一种方法修改按钮(只是更改文本)时,它再次崩溃。所以findViewById的返回值是" local"到调用它的方法,我应该在访问UI元素的每个方法中设置内容视图?答案 0 :(得分:1)
在之后 findViewById()
之前,请不要致电setContentView()
。否则,小部件将不存在。
更一般地说, not 在Activity
之后调用继承的方法,直到super.onCreate()
之后,除非特别建议这样做。
答案 1 :(得分:0)
这取决于您呼叫此线路的位置。 http://i.stack.imgur.com/6EQaU.png onCreate()方法包含对setContentView()的调用,在调用它之前,Android不知道如何处理你的按钮,因为它还没有膨胀!
因此,作为一个非常简单的经验法则,请始终确保已调用并完成setContentView(或者如果您正在处理片段onCreateView())。只有这样才能找到ViewById()。
如果您想获得进一步的指导,请发布一些发生崩溃的代码。
编辑:我尝试正确添加图片,但没有足够的代表。
答案 2 :(得分:0)
要了解这一点,您需要了解活动生命周期。您正试图查看尚未由Android创建的view
。
根据此处解释的Android生命周期" http://developer.android.com/training/basics/activity-lifecycle/starting.html"。在onCreate()
方法中,活动已创建,您可以访问活动的不同view
个。如果您在view
之前尝试查找onCreate()
,则应用会崩溃,因为它不知道该视图是否存在。