我目前正在android studio中创建actionBar
并且我已经创建了动作按钮,我的目标是每次单击按钮时都有一个下拉菜单。
在我的 menu_main.xml 中,我添加了项目搜索和帮助:
<item
android:id="@+id/menu_search"
android:icon="@drawable/ic_action_search"
android:title="@string/menu_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="collapseActionView|ifRoom"/>
<item android:id="@+id/action_help"
android:icon="@drawable/ic_action_help"
android:title="@string/action_help"
app:showAsAction="ifRoom"/>
在我的 MainActivity.java 中,我为我的下拉列表添加了字符串:
String[] actions = new String[] {
"Bookmark", "Subscribe", "Share", "Like"
};
在我的onOptionsItemSelected()
方法中,我添加了一个案例,每次点击此按钮时,它都会调用一个函数。这是我的代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_help:
helpMessage();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void helpMessage() {
//Toast.makeText(this, "Location button pressed", Toast.LENGTH_SHORT).show();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, actions);
System.out.println("HERE: " + getActionBar());
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
ActionBar.OnNavigationListener navigationListener = new ActionBar.OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
Toast.makeText(getBaseContext(), "You selected : " + actions[itemPosition], Toast.LENGTH_SHORT).show();
return false;
}
};
getActionBar().setListNavigationCallbacks(adapter, navigationListener);
}
当我运行该程序时,我的应用程序将崩溃,我得到
NullPointerException:尝试调用虚方法'void null对象上的android.app.ActionBar.setNavigationMode(int)' 参考
它指向getActionBar()
,它是NULL。
有什么想法吗?
答案 0 :(得分:1)
使用getSupportActionBar()
代替getActionBar()
。您的活动主题也应延长Theme.AppCompat
。
答案 1 :(得分:1)
我总是有这个错误....
我找到了一个解决方案,我把它放到我的Style
它将会工作,getActionBar()
不再为空了...
<item name="android:windowNoTitle">false</item>
<item name="android:windowActionBar">true</item>
希望这能帮到你
答案 2 :(得分:0)
我认为你应该这样做 1.检查主题
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
2.检查您的Activity类,它扩展了AppcombatActivity或ActionBarActivity
所以,我希望它对你有用