我需要从 fragment 内部填充一个 Spinner 到 ActionbarSherlock
.这是我所做的..
菜单 XML:main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<com.actionbarsherlock.internal.widget.icsspinner
android:id="@+id/menu_spinner"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
</com.actionbarsherlock.internal.widget.icsspinner>
</menu>
在 onCreateView
中的 fragment 内我用过setHasOptionsMenu(true);
并且还覆盖了 onCreateOptionsMenu
方法。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.main, menu);
SpinnerAdapter mSpinnerAdapter;
if (Build.VERSION.SDK_INT <= 10) {
mSpinnerAdapter = ArrayAdapter
.createFromResource(activity, R.array.news_menu,
android.R.layout.simple_spinner_item);
}else{
mSpinnerAdapter = ArrayAdapter.createFromResource(activity,
R.array.news_menu,
android.R.layout.simple_spinner_dropdown_item);
}
Spinner spinner = (Spinner) menu.findItem(R.id.menu_spinner);
if(spinner == null)
Log.d(Const.DEBUG, "Spinner is Null");
else
Log.d(Const.DEBUG, "Spinner is Not Null");
spinner.setAdapter(mSpinnerAdapter);
spinner.setSelection(0);
}
但是 logcat
显示“旋转器”是 null
.关于如何让它工作的任何想法以及适配器是我填充 spinner
的地方的任何想法来自 string-array
的值在strings.xml
为了获取 fragment 中的上下文,我使用了 onAttach 方法,
@Override
public void onAttach(Activity activity) {
this.activity = activity;
super.onAttach(activity);
}
[编辑]
根据@blackbet 的建议,我修改了我的 xml
和 onCreateOptionsMenu
.现在 NullPointerException
不见了,但是spinner
是empty
,最后还有一个溢出图标。
这里是代码更改:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.main, menu);
SpinnerAdapter mSpinnerAdapter;
if (Build.VERSION.SDK_INT <= 10) {
mSpinnerAdapter = ArrayAdapter
.createFromResource(activity, R.array.news_menu,
android.R.layout.simple_spinner_item);
}else{
mSpinnerAdapter = ArrayAdapter.createFromResource(activity,
R.array.news_menu,
android.R.layout.simple_spinner_dropdown_item);
}
MenuItem menuItem = menu.findItem(R.id.menu_spinner);
IcsSpinner spinner = (IcsSpinner) menuItem.getActionView();
if(spinner == null)
Log.d(Const.DEBUG, "Spinner is Null");
else
Log.d(Const.DEBUG, "Spinner is Not Null");
spinner.setAdapter(mSpinnerAdapter);
spinner.setSelection(0);
}
main.xml(菜单)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_spinner"
android:actionLayout="@layout/layout_config_menu"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</menu>
layout_config_menu.xml(在布局文件夹中)
<?xml version="1.0" encoding="utf-8"?>
<com.actionbarsherlock.internal.widget.IcsSpinner
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_action_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
这是我的 news_menu 字符串数组
<string-array name="news_menu">
<item>News</item>
<item>Tour Dates</item>
<item>Festival News And Rumors</item>
<item>Late Night Performances</item>
</string-array>
最佳答案
您应该为您的布局文件创建一个条目并为其分配一个 actionLayout:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_spinner"
android:actionLayout="@layout/layout_config_menu"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</menu>
内部资源/布局
<?xml version="1.0" encoding="utf-8"?>
<com.actionbarsherlock.internal.widget.IcsSpinner
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_action_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
在 onCreateOptionsMenu 中:
MenuItem menuItem = menu.findItem(R.id.menu_spinner);
IcsSpinner spinner = menuItem.getActionView();
关于android - Fragment 内的 onCreateOptionsMenu - 获取菜单项时出现 Nullpointerexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21748676/