Android Studio按钮OnClick导致失败?

时间:2015-09-02 16:45:23

标签: android

我正在为Android Studio中的Android应用程序工作,我试图像这样制作点击式监听器:

    Button menu_button = (Button)findViewById(R.id.menu_button);
    menu_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
     }
    });

但是,当我启动genymotion时,它告诉我应用程序已停止工作。如果我删除此代码:

    menu_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
     }
    });

应用程序运行正常。我非常困惑,并希望有人可以指出一些我不理解的事情。

这是我正在处理的主要活动的完整代码,我应该注意该按钮位于ViewPager中。

公共类MainActivity扩展了FragmentActivity {

private ViewPager m_BackgroundViewPager;
private ViewPager m_PanelViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.requestWindowFeature((int) Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);

    m_BackgroundViewPager = (ViewPager)(findViewById(R.id.mainViewPager));
    m_PanelViewPager = (ViewPager)(findViewById(R.id.bottomViewPager));

    m_BackgroundViewPager.setAdapter
            (new BackgroundPagerAdapter(getSupportFragmentManager(), this));
    m_PanelViewPager.setAdapter
            (new PanelPagerAdapter(getSupportFragmentManager(), this));

    Button menu_button = (Button)findViewById(R.id.menu_button);
    menu_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
     }
    });
   }
  }

LogCat结果:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at eqlogic.annswingsandthings.MainActivity.onCreate(MainActivity.java:37)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

XML:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#998822">
<Button
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:id="@+id/menu_button"
    android:text="Menu"
    android:textSize="12dp" />
</FrameLayout>

2 个答案:

答案 0 :(得分:0)

Button创建一个全局变量,如下所示:

Button menu_button;

然后在onCreate()中添加以下行:

menu_button = (Button)findViewById(R.id.menu_button);

现在,只要你想制作一个setOnClickListener(),就可以像以前一样做到:

menu_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     //Your click stuff
    }
});

修改

  

引起:java.lang.NullPointerException:尝试调用虚方法&#39; void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)&#39;在空对象引用上

确保activity_main.xml button中的android:id="@+id/menu_button" 包含此内容:

{{1}}

答案 1 :(得分:0)

问题是该按钮位于视图寻呼机内。

因此,为了显示按钮,要么将其从视图寻呼机中移除,要么将其添加到构成视图寻呼机一部分的片段的xml中,并在该片段中对其进行充气。