欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

灵活使用Android中ActionBar和ViewPager切换页面

程序员文章站 2024-02-11 21:37:46
本文实例讲述了android使用actionbar和viewpager切换页面,分享给大家供大家参考。具体如下: 运行效果截图如下: 项目布局如下: 具体代码...

本文实例讲述了android使用actionbar和viewpager切换页面,分享给大家供大家参考。具体如下:
运行效果截图如下:

灵活使用Android中ActionBar和ViewPager切换页面

项目布局如下:

灵活使用Android中ActionBar和ViewPager切换页面

具体代码如下:

mainactivity.java代码

import java.util.arraylist;
import java.util.list;
import android.os.bundle;
import android.support.v4.app.fragment;
import android.support.v4.app.fragmentmanager;
import android.support.v4.app.fragmentpageradapter;
import android.support.v4.app.fragmenttransaction;
import android.support.v4.view.viewpager;
import android.support.v4.view.viewpager.onpagechangelistener;
import android.support.v7.app.actionbar;
import android.support.v7.app.actionbar.tab;
import android.support.v7.app.actionbar.tablistener;
import android.support.v7.app.actionbaractivity;

import com.xuliugen.fragment.chatfragment;
import com.xuliugen.fragment.friendfragment;
import com.xuliugen.fragment.momentfragment;
import com.xuliugen.fragment.morefragment;

public class mainactivity extends actionbaractivity implements tablistener,onpagechangelistener {

  private list<mytab> tabslist = new arraylist<mainactivity.mytab>(4);
  private viewpager viewpager;// viewpager用于存放fragment
  private actionbar actionbar;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);

    // 添加4个fragment到自定义的tab中去
    tabslist.add(new mytab("聊天", chatfragment.class));
    tabslist.add(new mytab("朋友", friendfragment.class));
    tabslist.add(new mytab("时刻", momentfragment.class));
    tabslist.add(new mytab("更多", morefragment.class));

    initactionbar();

  }

  private void initactionbar() {

    // 找到viewpager
    viewpager = (viewpager) this.findviewbyid(r.id.viewpager);
    actionbar = getsupportactionbar(); // 获得v7中的actionbar
    actionbar.setnavigationmode(actionbar.navigation_mode_tabs);// 设置为导航模式

    // 通过循环遍历将创建的四个tab加入到actionbar中
    for (mytab tab : tabslist) {
      tab t = actionbar.newtab(); // 使用v7下边的tab
      t.settext(tab.gettext());
      t.settablistener(this);// 设置tablistener监听器
      actionbar.addtab(t);
    }
    viewpager.setadapter(new tabfragmentpageradapter(getsupportfragmentmanager()));
    viewpager.setonpagechangelistener(this);
  }

  /**
   * 封装一个tab的类
   * 
   * tab的文字
   * 
   * tab所包含的class
   */
  class mytab {

    private string text; // 标题的文字
    private class fragment;// 每一个tab所对应的页面fragment

    public string gettext() {
      return text;
    }

    public void settext(string text) {
      this.text = text;
    }

    public class getfragment() {
      return fragment;
    }

    public void setfragment(class fragment) {
      this.fragment = fragment;
    }

    /**
     * 两个参数的构造方法,便于创建一个对象
     * 
     * @param string
     * @param fragment
     */
    public mytab(string string, class fragment) {
      this.text = string;
      this.fragment = fragment;
    }

  }

  /**
   * 为viewpager设置的适配器
   */
  class tabfragmentpageradapter extends fragmentpageradapter {

    public tabfragmentpageradapter(fragmentmanager fm) {
      super(fm);
    }

    @override
    public fragment getitem(int i) {

      try {
        return (fragment) tabslist.get(i).getfragment().newinstance();
      } catch (instantiationexception e) {
        e.printstacktrace();
      } catch (illegalaccessexception e) {
        e.printstacktrace();
      }
      return null;
    }

    @override
    public int getcount() {
      return tabslist.size();
    }

  }

  /************* 下边是tablistener所实现的方法 ***********************/

  /**
   * 当tab被双次选中
   */
  @override
  public void ontabreselected(tab tab, fragmenttransaction fragmenttransaction) {

  }

  /**
   * 当tab被单次选中
   */
  @override
  public void ontabselected(tab tab, fragmenttransaction fragmenttransaction) {
    viewpager.setcurrentitem(tab.getposition());
  }

  @override
  public void ontabunselected(tab tab, fragmenttransaction fragmenttransaction) {

  }

  /**************** 下边是onpagechangelistener实现的方法 ****************/
  @override
  public void onpagescrollstatechanged(int i) {
  }

  @override
  public void onpagescrolled(int i, float arg1, int arg2) {

  }

  @override
  public void onpageselected(int i) {
    actionbar.selecttab(actionbar.gettabat(i));
  }

}

下边是四个fragment

public class chatfragment extends fragment {

  @override
  public view oncreateview(layoutinflater inflater, viewgroup container,
      bundle savedinstancestate) {
    return inflater.inflate(r.layout.fragment_friends, container, false);
  }
}

public class friendfragment extends fragment {

  @override
  public view oncreateview(layoutinflater inflater, viewgroup container,
      bundle savedinstancestate) {
    return inflater.inflate(r.layout.fragment_chat, container, false);
  }
}

public class momentfragment extends fragment {

  @override
  public view oncreateview(layoutinflater inflater, viewgroup container,
      bundle savedinstancestate) {
    return inflater.inflate(r.layout.fragment_moment, container, false);
  }
}

public class morefragment extends fragment {

  @override
  public view oncreateview(layoutinflater inflater, viewgroup container,
      bundle savedinstancestate) {
    return inflater.inflate(r.layout.fragment_more, container, false);
  }
}

activity_main.xml

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingbottom="@dimen/activity_vertical_margin"
  android:paddingleft="@dimen/activity_horizontal_margin"
  android:paddingright="@dimen/activity_horizontal_margin"
  android:paddingtop="@dimen/activity_vertical_margin"
  tools:context=".mainactivity" >

  <android.support.v4.view.viewpager
    android:id="@+id/viewpager"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
  </android.support.v4.view.viewpager>

</relativelayout>

下边是四个fragment的布局文件

<?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="fill_parent"
  android:orientation="vertical" >

  <textview
    android:id="@+id/textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="聊天" >
  </textview>

</linearlayout>

其他三个都一样只是文件名和里边的内容改变了一下。

希望本文所述对大家学习android软件编程有所帮助。