简体   繁体   English

将XML中的菜单项投射到微调框(Actionbar appcompat)

[英]Casting a Menu Item in XML to a Spinner (Actionbar appcompat)

I'm having some trouble casting a Menu Item in xml to a Spinner (actionbar compat) . 我在将xml中的菜单项投射到Spinner(actionbar compat)时遇到一些麻烦。 I've tried a couple of options, like these Spinner as MenuItem not initialized by findViewById or Adding spinner to ActionBar (not Navigation , but spinner = (Spinner)item.getActionView(); keeps coming back as null. Setting up a new spinner works though, but that's probably not relevant to my problem. 我尝试了几个选项,例如这些Spinner作为MenuItem而不是由findViewById初始化的,或者没有将Spinner 添加到ActionBar(不是Navigation ,而是spinner =(Spinner)item.getActionView();保持为空。设置一个新的Spinner虽然可以,但是可能与我的问题无关。

Code: 码:

    @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);
    }

I also tried 我也试过

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

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

menu/main.xml 菜单/ 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>

layout/action_short.xml layout / 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" />

getActionView() of my MenuItem return null answers it all: 我的MenuItem的getActionView()返回null会回答所有问题:

getActionView() only works if there's a custom actionView from setActionView. getActionView()仅在setActionView中有自定义actionView时有效。

Why though, I have No idea. 为什么,我不知道。 Why they dont in the example here http://developer.android.com/guide/topics/ui/actionbar.html#ActionView , who knows. 为什么他们没有在这里的示例http://developer.android.com/guide/topics/ui/actionbar.html#ActionView中 ,谁知道。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM