ActionBar+Fragment实现导航条功能

1,首先我们要有三个带布局Fragment,在这里我们三个分别是 @我的MyFragment.java 订单界面OrderFragment.java 和车票预订TicketsFragment.java

这三个Fragment有他们相对应的布局,并且都是{@link android.support.v4.app.Fragment}包下的。

2,然后我们要有一个avtivity继承FragmentActivity ,然后在这个activity里加上ActionBar

ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

3,给这个bar添加三个标签,格式如下,最后要添加监听事件

bar.addTab( bar.newTab().setText("标签一").setTabListener(listener));

4,这个接口会有三个方法,分别是选中时候调用,没有选中时候调用,重新选中时候调用

5,但是方法里的参数我们是不能使用的,因为我们用到的是support.v4包下面的,这里一定要注意

6,接下来我们就要把actionbar和Fragment进行连接了。首先我们要把这三个Fragment先声明并且实例化

OrderFragment orderFragment = new OrderFragment();
TicketsFragment ticketsFragment = new TicketsFragment();
MyFragment myFragment = new MyFragment();

7,然后我们要写一个内部类来继承TabListener这个接口,类里有两个参数分别是

 private FragmentManager manager;
 private Fragment f;

//构造方法

  MyTabListenerImpl(FragmentManager manager, Fragment ft) {
     this.f = ft;
     this.manager = manager;
  }

8,加载Fragment有两种方法,一种是静态的,还有一种是动态的,在这里我们用的是动态的

在选中标签的方法里

manager.beginTransaction().add(R.id.layoutmain, f).commit();

             开始事物                加入一个Fragment,这个id是这个activity的根节点id,最后提交

在未选中的标签方法里我们要把上一个移除

manager.beginTransaction().remove(f).commit();

这样我们就完成了!

package com.example.my12306;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.app.ActionBar.Tab;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;


public class PeopleActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_people);
        ActionBar bar = getActionBar();
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        //不显示标题
        bar.setDisplayShowTitleEnabled(false);
        //声明并实例化Fragment
        OrderFragment orderFragment = new OrderFragment();
        TicketsFragment ticketsFragment = new TicketsFragment();
        MyFragment myFragment = new MyFragment();
        
        bar.addTab(bar
                .newTab()
                .setText("车票预订")
                .setTabListener(
                        new MyTabListenerImpl(getSupportFragmentManager(),
                                ticketsFragment)));
        bar.addTab(bar
                .newTab()
                .setText("订单查询")
                .setTabListener(
                        new MyTabListenerImpl(getSupportFragmentManager(),
                                orderFragment)));
        bar.addTab(bar
                .newTab()
                .setText("@我的")
                .setTabListener(
                        new MyTabListenerImpl(getSupportFragmentManager(),
                                myFragment)));

    }

    class MyTabListenerImpl implements TabListener {
        private FragmentManager manager;
        private Fragment f;

        MyTabListenerImpl(FragmentManager manager, Fragment ft) {
            this.f = ft;
            this.manager = manager;
        }

        @Override
        // 选中标签
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
            manager.beginTransaction().add(R.id.layoutmain, f).commit();
        }

        @Override
        // 没有选中标签
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
            manager.beginTransaction().remove(f).commit();
        }

        @Override
        // 重新选中标签
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.people, menu);
        return true;
    }

}
原文地址:https://www.cnblogs.com/84126858jmz/p/4908932.html