ActionBar BUG:使用SearchView后,列表模式导航不可见 [英] ActionBar BUG: List mode navigation not visible after using SearchView
问题描述
项目演示此错误: https://github.com/smarek/ActionBar-Navigation-Bug
Bugreport b.android.com : http:// code.google.com/p/android/issues/detail?id=51449
Bugreport on b.android.com : http://code.google.com/p/android/issues/detail?id=51449
我是目前面临ActionBar的一个问题。
I'm currently facing an issue with ActionBar.
让我们有一个ViewPager + PagerTitleStrip和3个碎片。
用户流程:
Let's have a ViewPager+PagerTitleStrip and 3 Fragments.
User flow:
- 打开申请
- First Fragment已将导航模式设为NAVIGATION_MODE_LIST
- 其他片段有NAVIGATION_MODE_STANDARD
仅添加MainActivity和布局代码该项目是标准的Android应用程序项目,minSdk 11,在创建主要活动时,选择空白活动并滑动视图+标题栏
布局/活动_main .xml
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <!-- This title strip will display the currently visible page title, as well as the page titles for adjacent pages. --> <android.support.v4.view.PagerTitleStrip android:id="@+id/pager_title_strip" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" android:background="#33b5e5" android:paddingBottom="4dp" android:paddingTop="4dp" android:textColor="#fff" /> </android.support.v4.view.ViewPager>
com / example / project / MainActivity.java
// imports ommited public class MainActivity extends FragmentActivity { SectionsPagerAdapter mSectionsPagerAdapter; ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); } public static class DummySectionFragment extends Fragment { public static final String ARG_SECTION_NUMBER = "section_number"; public static final int MENU_SEARCH = -1; protected MenuItem searchItem; protected SearchView mSearchView; public DummySectionFragment() { setHasOptionsMenu(true); } /* * Initializing menu items, adding only searchItem (aka SearchView in actionview) */ @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { mSearchView = new SearchView(getActivity().getActionBar() .getThemedContext()); searchItem = menu .add(Menu.NONE, MENU_SEARCH, Menu.NONE, "Search") .setIcon(android.R.drawable.ic_menu_search) .setActionView(mSearchView) .setShowAsActionFlags( MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); super.onCreateOptionsMenu(menu, inflater); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView textView = new TextView(getActivity()); textView.setGravity(Gravity.CENTER); textView.setText(Integer.toString(getArguments().getInt( ARG_SECTION_NUMBER))); return textView; } // Using setUserVisibleHint to operate with actionbar // (navigation mode) and visibility of option menu items // if isVisibleToUser, we're doing setup for current Fragment @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { // setting navigation mode according to fragment ActionBar ab = getActivity().getActionBar(); int mode = 0; // ARG_SECTION_NUMBER is argument with numbers 1, 2, 3 switch (getArguments().getInt(ARG_SECTION_NUMBER)) { default: case 1: mode = ActionBar.NAVIGATION_MODE_LIST; // Simple adapter added to spinner, to be visible ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>( getActivity(), android.R.layout.simple_spinner_dropdown_item, new String[] { "A", "B", "C" }); ab.setListNavigationCallbacks(spinnerArrayAdapter, new OnNavigationListener() { @Override public boolean onNavigationItemSelected( int itemPosition, long itemId) { return false; } }); break; case 2: case 3: mode = ActionBar.NAVIGATION_MODE_STANDARD; break; } getActivity().getActionBar().setNavigationMode(mode); } else { // resetting navigation mode if (getActivity() != null && getActivity().getActionBar() != null) getActivity().getActionBar().setNavigationMode( ActionBar.NAVIGATION_MODE_STANDARD); } } } public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return 3; } @Override public Fragment getItem(int position) { Fragment fragment = new DummySectionFragment(); Bundle args = new Bundle(); args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); fragment.setArguments(args); return fragment; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return getString(R.string.title_section1).toUpperCase(); case 1: return getString(R.string.title_section2).toUpperCase(); case 2: return getString(R.string.title_section3).toUpperCase(); } return null; } } }
推荐答案
错误
Bug
我发布这个只是为了指向讨论的方向这个bug。
I am posting this just to point the discussion in the direction of the bug.
该错误与
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
标志更相关。删除标志后,一切都会完美运行。这很可能是一个错误,但我不确定是否有一个合理的解释。The bug is more related to the
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
flag. Once you remove the flag, everything will work perfectly. It is most probably a bug but once again I am not sure if there is a rational explanation.解决方案 (不是真的)
Solution (not really)
你正在
onCreateOptionsMenu
中创建菜单项,删除 ORedMenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
When you're creating the menu item in
onCreateOptionsMenu
, remove the ORedMenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
只需更改此
searchItem = menu .add(Menu.NONE, MENU_SEARCH, Menu.NONE, "Search") .setIcon(android.R.drawable.ic_menu_search) .setActionView(mSearchView) .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
到
searchItem = menu .add(Menu.NONE, MENU_SEARCH, Menu.NONE, "Search") .setIcon(android.R.drawable.ic_menu_search) .setActionView(mSearchView) .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);
没有viewpager的错误
Bug without viewpager
我已经分叉了项目,这里没有viewpager具有相同的行为 ActionBar-Navigation-Bug
I have forked the project and here it is without the viewpager with the same behaviour ActionBar-Navigation-Bug
这篇关于ActionBar BUG:使用SearchView后,列表模式导航不可见的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!