ActionBar结合Fragment实现下拉式导航

来源:互联网 发布:咕咕收音机mac版 编辑:程序博客网 时间:2024/05/16 14:58
一、相关概念
ActionBar除可提供Tab导航支持外,还提供了下拉式(DropDown)导航方式。下拉式的导航ActionBar在顶端生成下拉列表框,当用户单击每个列表项时,系统根据用户单击事件导航指定Fragment。
为了使用ActionBar实现下拉式导航,按如下步骤进行即可。
1、调用ActionBar的setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)方法设置使用下拉列表的导航方式。
2、调用ActionBar的setListNavigationCallbacks(SpinnerAdapter adapter,ActionBar.OnNavigationListener callback)添加多个列表项,并为每个列表项设置事件监听器。其中第一个参数Adapter负责提供多个列表项,第二个参数为事件监听器。




二、实例

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/container"    android:layout_width="match_parent"    android:layout_height="match_parent"/>

ActionBar_DropDownNav.java

public class ActionBar_DropDownNav extends Activity implementsActionBar.OnNavigationListener{private static final String SELECTED_ITEM = "selected_item";@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);final ActionBar actionBar = getActionBar();// 设置ActionBar是否显示标题actionBar.setDisplayShowTitleEnabled(true);// 设置导航模式,使用List导航actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);//①// 为actionBar安装ArrayAdapteractionBar.setListNavigationCallbacks(new ArrayAdapter<String>(ActionBar_DropDownNav.this,android.R.layout.simple_list_item_1,android.R.id.text1, new String[]{"第一页","第二页","第三页" }), this);}@Overridepublic void onRestoreInstanceState(Bundle savedInstanceState){if (savedInstanceState.containsKey(SELECTED_ITEM)){// 选中前面保存的索引对应的Fragment页getActionBar().setSelectedNavigationItem(savedInstanceState.getInt(SELECTED_ITEM));}}@Overridepublic void onSaveInstanceState(Bundle outState){// 将当前选中的Fragment页的索引保存到Bundle中outState.putInt(SELECTED_ITEM, getActionBar().getSelectedNavigationIndex());}// 当导航项被选中时激发该方法@Overridepublic boolean onNavigationItemSelected(int position, long id){// 创建一个新的Fragment对象Fragment fragment = new DummyFragment();// 创建一个Bundle对象,用于向Fragment传入参数Bundle args = new Bundle();args.putInt(DummyFragment.ARG_SECTION_NUMBER, position + 1);// 向fragment传入参数fragment.setArguments(args);// 获取FragmentTransaction对象FragmentTransaction ft = getFragmentManager().beginTransaction();// 使用fragment代替该Activity中的container组件ft.replace(R.id.container, fragment);// 提交事务ft.commit();return true;}}


上面①处代码就是为ActionBar启用下拉导航支持的关键代码

原创粉丝点击