在android spinner上获取空指针

Posted

技术标签:

【中文标题】在android spinner上获取空指针【英文标题】:Getting a null pointer on android spinner 【发布时间】:2015-03-09 03:07:57 【问题描述】:

我正在尝试将微调器实现到操作栏中,但是当我尝试设置适配器时得到一个空指针引用。我不知道问题是什么,因为当我之前在活动中设置它时它工作正常。

这是我的代码

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    if (!mNavigationDrawerFragment.isDrawerOpen()) 
        // Inflate the menu; this adds items to the action bar if it is present.if (!mNavigationDrawerFragment.isDrawerOpen()) 
        // Only show items in the action bar relevant to this screen
        // if the drawer is not showing. Otherwise, let the drawer
        // decide what to show in the action bar.
        getMenuInflater().inflate(R.menu.menu_game, menu);
        restoreActionBar();
        Spinner s = (Spinner) menu.findItem(R.id.menu_spinner).getActionView(); // find the spinner
        /*SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this.getSupportActionBar()
                .getThemedContext(), R.array.mile_selections, android.R.layout.simple_spinner_dropdown_item); //  create the adapter from a StringArray*/
        ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter.createFromResource(this, R.array.mile_selections, android.R.layout.simple_spinner_item);
        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(spinnerAdapter); // set the adapter
        s.setOnItemSelectedListener(this);
        return true;
    
    return super.onCreateOptionsMenu(menu);

这是错误

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
        at com.sousheelvunnam.scrimmage.ui.GameActivity.onCreateOptionsMenu(GameActivity.java:138)

【问题讨论】:

【参考方案1】:

根据其他一些***帖子,您需要在调用getActionView之前对菜单对象调用setActionView。

这篇文章有以下评论:

Casting a Menu Item in XML to a Spinner (Actionbar appcompat)

不,但这让我想到了另一个几乎同名的问题: ***.com/questions/14286768/... 显然 getActionView 没有 除非您先使用 setActionView 否则工作。所以它不会捡起来 来自 XML – ThomQ 2014 年 4 月 10 日 0:01

这里是说你必须使用 SetActionView 的帖子的链接。

getActionView() of my MenuItem return null

【讨论】:

【参考方案2】:

我遇到了同样的问题。如果你按照上面的评论链,你会发现你不需要使用 setActionView。您只需要正确设置布局 XML:

我有同样的问题,我的错误是我没有正确使用 actionLayout xml 属性正确。首先,你必须定义 像这样的菜单标签中的自定义命名空间 xmlns:app="http://schemas.android.com/apk/res-auto" 然后在菜单上 您希望必须使用 actionLayout 属性的项目,如下所示: app:actionLayout="@layout/month_picker" 在这种情况下,month_picker 布局是一个微调器。这样做就没有必要使用 setActionView 方法。 – 豪尔赫·萨拉斯 2015 年 5 月 25 日 0:50

为我工作。

【讨论】:

以上是关于在android spinner上获取空指针的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Android c# Viewstub 只工作一次,然后获取空指针

在回调管理器上获取空指针异常

android - LAN 套接字编程 - 获取空指针和地址使用异常

Android:小部件 - 在远程视图上使用 setOnclickPendingIntent 时出现空指针异常?

Android gps getlastknownlocation 返回空指针异常

Android - this.cordova.getActivity().getApplicationContext() 的空指针异常