android 获取menu控件空指针异常

问题描述

android 获取menu控件空指针异常

这是我的代码:

public class MainActivity extends AppCompatActivity
{
    private static Toolbar action_add;
    private static Menu menu;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        onPrepareOptionsMenu(menu);
        action_add.setOnClickListener(new Toolbar.OnClickListener()
        {
            public void onClick(View v)
            {
                showDialog_Layout(MainActivity.this);
            }
        });
    }
    @Override
    public boolean onPrepareOptionsMenu(Menu menu)
    {
        super.onPrepareOptionsMenu(menu);
        menu.findItem(R.id.action_add).setChecked(true);
        return true;
    }
    private void showDialog_Layout(Context context) {
        LayoutInflater inflater = LayoutInflater.from(this);
        final View textEntryView = inflater.inflate(R.layout.dialoglayout, null);
        final EditText edtInput=(EditText)textEntryView.findViewById(R.id.edtInput);
        final AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setCancelable(false);
        builder.setIcon(R.drawable.a);
        builder.setTitle("Title");
        builder.setView(textEntryView);
        builder.setPositiveButton("确认",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        setTitle(edtInput.getText());
                    }
                });
        builder.setNegativeButton("取消",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        setTitle("");
                    }
                });
        builder.show();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return super.onCreateOptionsMenu(menu);
    }
}

这是我的错误:
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference

onPrepareOptionsMenu(menu);
menu.findItem(R.id.action_add).setChecked(true);
两行,大神给看看呗!!!

解决方案

 setSupportActionBar(toolbar);
//onPrepareOptionsMenu(menu); 注释掉这句话,这没必要调用

解决方案二:

注意看这行代码:
setSupportActionBar(toolbar);
这行代码是自动回调的,不需要你显式去调用,注释掉即可,类似这样的还有很多,以后可能还会有onKeyDown 等函数

时间: 2024-07-29 09:08:25

android 获取menu控件空指针异常的相关文章

求救-android控件空指针异常

问题描述 android控件空指针异常 初始化布局时,findviewbyId 时,找不到那个控件,控件值为空.然后运行了许多次以后,又正常了,那个控件也找到了.这是为啥. 我调试时没有改其他代码,只是在处理异常中,写了无关紧要的测试代码. 解决方案 上代码啊--口述根本看不出原因

android之SeekBar控件用法详解_Android

MainActivity.java package com.example.mars_2400_seekbar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import a

android之RatingBar控件用法详解_Android

MainActivity.java package com.example.mars_2500_ratingbar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import

Android自定义组合控件之自定义下拉刷新和左滑删除实例代码_Android

绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一个,做完了和QQ的对比了一下,并没有太大区别,今天分享给大家,其实并不难,但是不知道为什么网上没有比较好的Demo,当你的项目真的很急的时候,又没有比较好的Demo,那么"那条友谊的小船儿真是说翻就翻啊",好了,下面先来具体看一下实现后的效果吧:   代码已经上传到Github上了,小伙伴

android之datepicker控件的用法_Android

如下所示: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:lay

Android常用布局控件之RelativeLayout

我们使用LinearLayout和TableLayout可以满足开发应用程序界面基本的要求 .但是有时候实现界面的时候不够灵活,我们还可以使用另外一种控件 RelativeLayout.RelativeLayout是一种相对布局的控件,这个容器内部的子元 素们可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位,类似于 网页设计中的CSS.在指定控件的位置时,我们需要指定这个控件与其它控件之 间的相对位置关系,比如说与另一个控件的左边对齐,右对齐,位于另一个控件 的上方,下方等等.一个控件

Android常见布局控件之LinearLayout和TableLayout

一.LinearLayout布局控件 xml属性 android:baselineAligned:是否允许用户调整它内容的基线. android:baselineAlignedChildIndex:当一个线性布局与另一个布局是按基 线对齐的一部分,它可以指定其内容的基线对齐方式. android:gravity:指定控件中内容的基本内容. android:orientation:设置它内容的对其方向,有两个可以选择的值: horizontal和vertical.分别表示水平排列和垂直排列. Li

分享Android中ExpandableListView控件使用教程_Android

本文采用一个Demo来展示Android中ExpandableListView控件的使用,如如何在组/子ListView中绑定数据源.直接上代码如下: 程序结构图: layout目录下的 main.xml 文件源码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

Android编程布局控件之AbsoluteLayout用法实例分析_Android

本文实例讲述了Android编程布局控件之AbsoluteLayout用法.分享给大家供大家参考,具体如下: AbsoluteLayout是绝对布局管理器,指的是指定组件的左上角绝对坐标来指定组件的布局 <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"