Java ';void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)和#x27;关于空对象引用&&书信电报;item元素不应在此处

Java ';void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)和#x27;关于空对象引用&&书信电报;item元素不应在此处,java,android,Java,Android,我正试图在我的主页活动中定义一个按钮,以打开我的设置活动,但出现错误: java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.padmw/com.example.padmw.Home}: java.lang.NullPointerException:尝试调用虚拟方法“void” android.widget.Button.setOnClickListener(android.view.view$OnClickListener)'

我正试图在我的
主页
活动中定义一个按钮,以打开我的
设置
活动,但出现错误:

java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.padmw/com.example.padmw.Home}: java.lang.NullPointerException:尝试调用虚拟方法“void” android.widget.Button.setOnClickListener(android.view.view$OnClickListener)' 关于空对象引用

设置项的布局在
res/menu
中,我尝试将其移动到
res/layout
中,但它说元素项不应该在那里。我该怎么办

Home.class中的我的按钮:

    Button mButton = (Button) findViewById(R.id.action_settings);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(Home.this, SettingsActivity.class));
        }
    });
res/home.xml中的我的项目:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />
</menu>

如果要使用
findViewById
,按钮应该在布局中,而不是菜单中

对于菜单,您需要覆盖选项项Selected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // do something
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
您需要为home.xml菜单充气:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.home, menu);
        return true;
    }

请注意,home.xml应该位于
res/menu/
文件夹中。

因此对于菜单项,我们是这样做的 1) 要指定活动的选项菜单,请覆盖OnCreateOptions菜单()。在此方法中,您可以膨胀菜单资源:-

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.game_menu, menu);
    return true;
}
2) 处理点击事件: 您可以将此ID与已知菜单项相匹配,以执行适当的操作。例如:

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.action_settings:
          // do your work
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

仅当您的问题与IDE android studio直接相关时,请使用android studio标记。