我正在为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>
答案 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中,并在该片段中对其进行充气。