zoukankan      html  css  js  c++  java
  • 在ActionBar中进行Fragment之间的切换

      在ActionBar中添加标签(Tabs),每个标签对应的是一个Fragment,点击不同的Tab时,就会切换到对应的Fragment。

      这里有五个关键步骤:

      1. 要实现 ActionBar.TabListener接口,当点击Tab的时候触发这个接口里面的事件,有onTabSelected(), onTabUnselected(), 和 onTabReselected(). 实现ActionBar.TabListener接口时,应当在类内有个Fragment的引用,这样点击这个Tab时就可以调用对应的Fragment.

      2. 通过getActionBar() 方法得到Activity中的ActionBar。

      3. 设置AcitonBar的操作模式: setNavigationMode(NAVIGATION_MODE_TABS)

      4. 在ActionBar中添加Tabs:一.调用AciontBar的newTab()生成一个ActionBar.Tab. 二.为Tab增加text或者icon .调用setText() , setIcon() 三.为每个 ActionBar.Tab 添加ActionBar.TabListener.

      5. 调用addTab()将生成的Tab加入ActionBar中

      

      以下是例子代码,就是为了测试,没有实际的用途.

      有两个Fragment:EditFragment和ComputerFragment,对应的Tab是"编辑"和计算。他们的XML和Activity如下:

    EditFragment:

    public class EditFragment extends Fragment
    {
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            System.out.println("EidtFragment--->onCreate");
            super.onCreate(savedInstanceState);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            System.out.println("EidtFragment--->onCreateView");
            return inflater.inflate(R.layout.editfragment, container, false);
        }
    
        @Override
        public void onStop()
        {
            System.out.println("EidtFragment--->onStop");
            super.onStop();
        }
    }

    editfragment.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:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:text="请输入你的信息:"
            android:textSize="20dp" />
    
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="40pt"
            android:layout_margin="5dp"
            android:background="@android:color/darker_gray"
            android:textSize="18dp" />
    
    </LinearLayout>

    ComputerFragment:

    public class ComputerFragment extends Fragment
    {
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            System.out.println("ComputerFragment--->onCreate");
            super.onCreate(savedInstanceState);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            System.out.println("ConputerFragment--->onCreateView");
            return inflater.inflate(R.layout.computerfragment, container, false);
        }
    
        @Override
        public void onStop()
        {
            System.out.println("ConputerFragment--->onStop");
            super.onStop();
        }
    }

    computerfragment.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:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:text="简单加法计算"
            android:textSize="20dp" />
    
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@android:color/darker_gray" />
    
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@android:color/darker_gray" />
    
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="开始计算" />
    
    </LinearLayout>

     主要的程序:MainActivity:

    public class MainActivity extends Activity
    {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            System.out.println("MainActivity--->onCreate");
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            // 得到Activity的ActionBar
            ActionBar actionBar = getActionBar();
            // 设置AcitonBar的操作模型
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            // 将Activity的头部去掉
            actionBar.setDisplayShowTitleEnabled(false);
            // 生成Tab
            Tab edit = actionBar.newTab().setText("编辑");
            Tab computer = actionBar.newTab().setText("计算");
            // 为每个Tab添加Listener
            MyTabListener editListener = new MyTabListener(new EditFragment());
            edit.setTabListener(editListener);
            MyTabListener computerListener = new MyTabListener(new ComputerFragment());
            computer.setTabListener(computerListener);
            // 将Tab加入ActionBar中
            actionBar.addTab(edit);
            actionBar.addTab(computer);
        }
    
        @Override
        protected void onStop()
        {
            System.out.println("MainActivity--->onStop");
            super.onStop();
        }
    
        /**
         * 实现ActionBar.TabListener接口
         */
        class MyTabListener implements TabListener
        {
            // 接收每个Tab对应的Fragment,操作
            private Fragment fragment;
    
            public MyTabListener(Fragment fragment)
            {
                this.fragment = fragment;
            }
    
            public void onTabReselected(Tab tab, FragmentTransaction ft)
            {
    
            }
    
            // 当Tab被选中的时候添加对应的Fragment
            public void onTabSelected(Tab tab, FragmentTransaction ft)
            {
                ft.add(R.id.context, fragment, null);
            }
    
            // 当Tab没被选中的时候删除对应的此Tab对应的Fragment
            public void onTabUnselected(Tab tab, FragmentTransaction ft)
            {
                ft.remove(fragment);
            }
        }
    }

    程序运行结果:

         

  • 相关阅读:
    迷你版 smarty --模板引擎和解析
    php 常用五种模式
    23种设计模式全解析 (java版本)
    centos 软件安装 删除
    centos 交换分区
    centos 忘记 root 密码
    Windows7 下安装 CentOS6.5
    centos 基本操作(输入法安装,adls宽带连接,查找文件,模拟终端)
    【Storm篇】--Storm并发机制
    【Storm篇】--Storm分组策略
  • 原文地址:https://www.cnblogs.com/hanyuan/p/ActionBar_Fragments.html
Copyright © 2011-2022 走看看