(Android 3.0+)我如何创建一个Spinner用作Android Honeycomb动作栏的动作项?据我所知,Action Bar的LIST模式确实如此,但我想改用它的TAB模式。因为,据我所知,我不能同时使用两者,我试图将微调器用作操作项。
这是java:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.spin_menu, menu);
Spinner spin = (Spinner) findViewById(R.id.spin_widget);
ArrayAdapter<CharSequence> spinAdaptor = ArrayAdapter.createFromResource(
this, R.array.spinlist, android.R.layout.simple_spinner_item);
spinAdaptor.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(spinAdaptor);
return super.onCreateOptionsMenu(menu);
}
eclipse中没有出现任何错误,但运行该程序会导致强制关闭。对绝对初学者的任何建议?
更新 - 添加了logcat错误严重性日志:(至少,我认为是这样)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):致命异常:主要
06-27 18:36:59.496:ERROR / AndroidRuntime(493):java.lang.NullPointerException
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at me.ics.icsActivity.onCreateOptionsMenu(icsActivity.java:84)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):在android.app.Activity.onCreatePanelMenu(Activity.java:2389)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:347)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:647)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at com.android.internal.policy.impl.PhoneWindow $ 2.run(PhoneWindow.java:2581)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):在android.os.Handler.handleCallback(Handler.java:587)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):在android.os.Handler.dispatchMessage(Handler.java:92)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):在android.os.Looper.loop(Looper.java:132)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):在android.app.ActivityThread.main(ActivityThread.java:4025)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at java.lang.reflect.Method.invokeNative(Native Method)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at java.lang.reflect.Method.invoke(Method.java:491)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:841)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-27 18:36:59.496:ERROR / AndroidRuntime(493):at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
我的猜测是,您没有Spinner
android:id
为R.id.spin_widget
。
如果您尝试将Spinner
作为操作项,正如您的问题所述,您不会通过Spinner
获得findViewById()
,而是getActionView()
在MenuItem
上有问题。 Here is a sample project演示了这一点,以适用于Honeycomb的方式实现,但也成功地在旧版Android上跳过此代码。
答案 1 :(得分:0)
我一直在寻找你想做的事情。 这个答案非常适合我: https://stackoverflow.com/a/9118507/2374650
我这样做:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Spinner
android:id="@+id/menu_spinner_pictures"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:entries="@array/types_view" />
</RelativeLayout>
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Configure ActionBar
ActionBar actionBar = getActionBar();
View spinner = getLayoutInflater().inflate(R.layout.my_action_bar, null);
actionBar.setCustomView(spinner);
actionBar.setDisplayShowCustomEnabled(true);
(...)