我需要将片段内的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
中的片段中,我使用了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
的{{1}}值的方式
要获取Fragment中的上下文,我使用的是onAttach方法,
strings.xml
[编辑]
根据@blackbet建议,我修改了我的@Override
public void onAttach(Activity activity) {
this.activity = activity;
super.onAttach(activity);
}
和xml
。现在onCreateOptionsMenu
已消失,但NullPointerException
为spinner
,最后我也会收到溢出图标。
以下是代码更改:
empty
main.xml(菜单)
@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);
}
layout_config_menu.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>
这是我的news_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" />
答案 0 :(得分:1)
您应该为布局文件创建一个条目,并为其分配一个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>
内部res / layout
<?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();