铸造XML的菜单项到微调(ActionBar的应用程序兼容性) [英] Casting a Menu Item in XML to a Spinner (Actionbar appcompat)
问题描述
我有一些麻烦铸造XML的菜单项到微调(动作条COMPAT)。我试了几个选项,像这样的<一个href=\"http://stackoverflow.com/questions/12272104/spinner-as-menuitem-not-initialized-by-findviewbyid\">Spinner如菜单项不findViewById 或添加微调初始化动作条(不导航一>,但微调=(微调)item.getActionView();不断回来作为空设置新的微调,虽然工作,但是这可能不相关的我的问题。
code:
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){ MenuInflater吹气= getMenuInflater();
inflater.inflate(R.menu.main,菜单); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); //微调=(微调)menu.findItem(R.id.category_spinner).getActionView();
//微调=新的微调(本); 菜单项项= menu.findItem(R.id.category_spinner);
微调=(微调)item.getActionView(); SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(这一点,R.array.operating_systems,android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(mSpinnerAdapter);
actionBar.setListNavigationCallbacks(mSpinnerAdapter,mOnNavigationListener);
mOnNavigationListener =新ActionBar.OnNavigationListener(){ 的String [] =字符串getResources()getStringArray(R.array.operating_systems)。 @覆盖
公共布尔onNavigationItemSelected(INT位置,长的itemId){
ListContentFragment newFragment =新ListContentFragment();
FragmentTransaction英尺= getSupportFragmentManager()调用BeginTransaction()。
ft.replace(R.id.fragment_container,newFragment,串[位置]);
ft.commit();
返回true;
}
}; 返回super.onCreateOptionsMenu(菜单);
}
我也试过
菜单项项目= menu.findItem(R.id.category_spinner_item);
微调=(微调)MenuItemCompat.getActionView(项目);
http://developer.android.com/guide/topics/ UI / actionbar.html#的ActionView还要回来空。
菜单/ main.xml中
&LT;菜单的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:yourapp =http://schemas.android.com/apk/res-auto&GT;
&LT;项目
机器人:ID =@ + ID / category_spinner
机器人:showAsAction =ifRoom
机器人:actionLayout =@布局/ action_sort/&GT; &LT;项目机器人:ID =@ + ID / action_share
机器人:图标=@绘制/ ic_action_share
机器人:标题=@字符串/ action_share
yourapp:showAsAction =ifRoom/&GT; &LT;项目机器人:ID =@ + ID / action_settings
机器人:图标=@绘制/ ic_action_overflow
机器人:标题=@字符串/ action_settings
yourapp:showAsAction =总是/&GT;
&所述; /菜单&gt;
布局/ action_short.xml
&LT;微调的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:项=@阵列/ operating_systems/&GT;
<一个href=\"http://stackoverflow.com/questions/14286768/getactionview-of-my-menuitem-return-null\">getActionView()我的菜单项返回NULL 回答了一切:
getActionView()只工作,如果有一个从一个自定义的actionView
setActionView。
块引用>为什么虽然,我不知道。他们为什么在这个例子这里不 http://developer.android.com/指南/主题/ UI / actionbar.html#的ActionView,谁也不知道。
I'm having some trouble casting a Menu Item in xml to a 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.
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.
menu/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
<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:
getActionView() only works if there's a custom actionView from setActionView.
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.
这篇关于铸造XML的菜单项到微调(ActionBar的应用程序兼容性)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!