Как бы я создал Spinner для использования в качестве элемента действия? - PullRequest
4 голосов
/ 27 июня 2011

(Android 3.0+) Как создать Spinner для использования в качестве элемента действия для панели действий Android Honeycomb? Я понимаю, что режим 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);
}

При затмении ошибок не возникает, но запуск программы приводит к принудительному закрытию. Любые предложения для абсолютного новичка?

Обновление - добавлен журнал серьезности ошибок logcat: (по крайней мере, я так думаю)

06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: main
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): java.lang.NullPointerException
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на me.ics.icsActivity.onCreateOptionsMenu (icsActivity.java:84)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на android.app.Activity.onCreatePanelMenu (Activity.java:2389)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на com.android.internal.policy.impl.PhoneWindow.preparePanel (PhoneWindow.java:347)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu (PhoneWindow.java:647)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на com.android.internal.policy.impl.PhoneWindow $ 2.run (PhoneWindow.java:2581)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на android.os.Handler.handleCallback (Handler.java:587)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на android.os.Handler.dispatchMessage (Handler.java:92)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на android.os.Looper.loop (Looper.java:132)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на android.app.ActivityThread.main (ActivityThread.java:4025)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): в java.lang.reflect.Method.invokeNative (собственный метод)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): в java.lang.reflect.Method.invoke (Method.java:491)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:841)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:599)
06-27 18: 36: 59.496: ОШИБКА / AndroidRuntime (493): в dalvik.system.NativeStart.main (собственный метод)

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Я предполагаю, что у вас нет Spinner, у которого android:id равно R.id.spin_widget.

Если вы пытаетесь поместить Spinner в качестве элемента действия, как говорится в вашем вопросе, вы не получите это Spinner через findViewById(), а скорее на getActionView() для рассматриваемого MenuItem. Вот пример проекта , демонстрирующий это, реализованный таким образом, чтобы он работал на Honeycomb, но также успешно пропускал этот код на более старых версиях Android.

0 голосов
/ 12 мая 2013

Я искал что-то, что вы хотите сделать. Этот ответ работает у меня отлично: https://stackoverflow.com/a/9118507/2374650

Я делаю это:

my_action_bar.xml

<?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>

MainPanelActivity.java

 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);
        (...)
...