【问题标题】:Casting a Menu Item in XML to a Spinner (Actionbar appcompat)将 XML 中的菜单项投射到 Spinner (Actionbar appcompat)
【发布时间】:2014-05-23 09:59:07
【问题描述】:

我在将 xml 中的菜单项转换为 Spinner (actionbar compat) 时遇到了一些问题。我尝试了几个选项,例如 Spinner as MenuItem not initialized by findViewByIdAdding spinner to ActionBar (not Navigation ,但是 spinner = (Spinner)item.getActionView();不断返回为空。设置一个新的微调器虽然可行,但这可能与我的问题无关。

代码:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);

        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        //spinner = (Spinner) menu.findItem(R.id.category_spinner).getActionView();
        //spinner = new Spinner(this);

        MenuItem item = menu.findItem(R.id.category_spinner);
        spinner = (Spinner)item.getActionView();

        SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.operating_systems,android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(mSpinnerAdapter);
        actionBar.setListNavigationCallbacks(mSpinnerAdapter, mOnNavigationListener);
        mOnNavigationListener = new ActionBar.OnNavigationListener() {

            String[] strings = getResources().getStringArray(R.array.operating_systems);

            @Override
            public boolean onNavigationItemSelected(int position, long itemId) {
                ListContentFragment newFragment = new ListContentFragment();
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.fragment_container, newFragment, strings[position]);
                ft.commit();
                return true;
            }
        };

        return super.onCreateOptionsMenu(menu);
    }

我也试过

    MenuItem item = menu.findItem(R.id.category_spinner_item);
    spinner = (Spinner) MenuItemCompat.getActionView(item);

http://developer.android.com/guide/topics/ui/actionbar.html#ActionView 但也返回 null。

菜单/main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >


    <item
            android:id="@+id/category_spinner"
            android:showAsAction="ifRoom"
            android:actionLayout="@layout/action_sort"  />

    <item android:id="@+id/action_share"
          android:icon="@drawable/ic_action_share"
          android:title="@string/action_share"
          yourapp:showAsAction="ifRoom"  />

    <item android:id="@+id/action_settings"
          android:icon="@drawable/ic_action_overflow"
          android:title="@string/action_settings"
          yourapp:showAsAction="always"/>


</menu>

布局/action_short.xml

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:entries="@array/operating_systems" />

【问题讨论】:

  • 你必须解释错误发生在哪里,或者只是从 Logcat 发布一个堆栈跟踪。
  • 微调器 = (微调器)item.getActionView();返回为空
  • 不,但它让我想到另一个几乎同名的问题:stackoverflow.com/questions/14286768/… 显然 getActionView 不起作用,除非你先使用 setActionView。所以它不会从 XML 中获取它

标签: android xml android-spinner menuitem android-support-library


【解决方案1】:

getActionView() of my MenuItem return null 全部回答:

getActionView() 仅在有来自的自定义 actionView 时才有效 设置动作视图。

为什么,我不知道。为什么他们不在这个例子中 http://developer.android.com/guide/topics/ui/actionbar.html#ActionView ,谁知道呢。

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2013-04-15
    • 2014-12-18
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多