【Android】Actionbar下拉导航
直接上代码。
activity类:
- package com.zzj.ui.actionbardemo;
- import android.app.ActionBar;
- import android.app.ActionBar.OnNavigationListener;
- import android.app.Activity;
- import android.app.Fragment;
- import android.app.FragmentTransaction;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ArrayAdapter;
- import android.widget.TextView;
- import com.zzj.ui.R;
- public class ActionbarListNavigation extends Activity implements
- OnNavigationListener {
- private ActionBar actionBar;
- private Fragment aFragment;
- private Fragment bFragment;
- private Fragment cFragment;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.actionbar_listnavigation_activity);
- actionBar = getActionBar();
- // 开启下拉导航模式
- actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
- /*
- *
- * 切屏(横屏竖屏切换)时Activity会被销毁,
- *
- * 但是Fragment会备份并且重新加载(调用onCreateView()方法)。
- */
- FragmentTransaction fragmentTransaction = getFragmentManager()
- .beginTransaction();
- aFragment = getFragmentManager().findFragmentByTag("aFragment");
- if (aFragment == null) {
- aFragment = new MyFragment();
- fragmentTransaction.add(R.id.fragment_container, aFragment,
- "aFragment");
- }
- bFragment = getFragmentManager().findFragmentByTag("bFragment");
- if (bFragment == null) {
- bFragment = new MyFragment();
- fragmentTransaction.add(R.id.fragment_container, bFragment,
- "bFragment");
- }
- cFragment = getFragmentManager().findFragmentByTag("cFragment");
- if (cFragment == null) {
- cFragment = new MyFragment();
- fragmentTransaction.add(R.id.fragment_container, cFragment,
- "cFragment");
- }
- System.out.println("aFragment:" + aFragment.hashCode());
- System.out.println("bFragment:" + bFragment.hashCode());
- System.out.println("cFragment:" + cFragment.hashCode());
- fragmentTransaction.commit();
- actionBar.setListNavigationCallbacks(new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, android.R.id.text1,
- new String[] { "聊天", "发现", "通讯录" }), this);
- }
- @Override
- public boolean onNavigationItemSelected(int itemPosition, long itemId) {
- System.out.println(itemPosition);
- FragmentTransaction ft = getFragmentManager().beginTransaction();
- switch (itemPosition) {
- case 0:
- ft.show(aFragment);
- ft.hide(bFragment);
- ft.hide(cFragment);
- break;
- case 1:
- ft.show(bFragment);
- ft.hide(aFragment);
- ft.hide(cFragment);
- break;
- case 2:
- ft.show(cFragment);
- ft.hide(bFragment);
- ft.hide(aFragment);
- break;
- default:
- break;
- }
- ft.commit();
- return true;
- }
- public static class MyFragment extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- System.out.println(container.getTag() + "_" + this.getTag() + "_"
- + this.hashCode());
- View view = inflater
- .inflate(R.layout.fragmenttab, container, false);
- TextView textView = (TextView) view
- .findViewById(R.id.fragment_textview);
- textView.setText("fragment_" + this.hashCode());
- return view;
- }
- }
- }
布局文件actionbar_listnavigation_activity.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/fragment_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:tag="fragment_container" >
- </LinearLayout>
fragment布局文件fragmenttab.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/fragment_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </LinearLayout>
效果:
需要注意的是,下拉导航并不一定需要fragment,这一点与Tab导航不同。

浙公网安备 33010602011771号