将onclicklistener添加到主视图外部的按钮时出现空指针异常

时间:2015-02-12 15:34:27

标签: java android

我想要从应用程序中主要内容视图以外的视图访问视图中的对象。我该怎么做呢?

我正在尝试添加onclicklistener,但每次都失败,因为程序似乎找不到按钮。

02-12 15:26:29.034: E/AndroidRuntime(11788): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.evolutionsystems.kiroco/com.evolutionsystems.kiroco.OverviewActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

或者我是以错误的方式来做这件事的?我应该在主视图中包含所有按钮并将它们设置为隐藏,然后在用户与程序交互时动态更改它们吗?

编辑 - 这是抛出错误的代码类型。

final Button receiver = (Button) findViewById(R.id.receiver);   
         receiver.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 aboutKirocoClicked(v);
             }
         }); 

接收器按钮是内容视图的不同视图的一部分,因此程序找不到它并返回null。

2 个答案:

答案 0 :(得分:0)

当你调用findViewById(int)时,你要求在你调用的对象的上下文中查看一个视图。

因此,如果这是一个活动,那么该对象必须是来自setContent的xml资源的一部分。

您还可以从其他夸大的布局(菜单,fragement)中找到资源,但您必须在该对象上调用findViewById才能找到该视图。

不要让你的生活变得复杂,但是一旦你对Android更加熟悉,你可能想要查看像Roboguice或Dagger这样的依赖注入框架。

答案 1 :(得分:0)

在您希望按钮出现的“活动”中,添加以下代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //In activity_main.xml, you have a button.
    setContentView(R.layout.activity_main);
    //You get this button with the referencing ID
    Button myBtn = (Button) findViewById(R.id.my_btn_id);
    //Now, you can set your onClickListner
    myBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Handle your button click
        }
    });
}