Android Actionbar Tab 导航模式
Android Actionbar Tab
下图中,红色矩形圈起来的就是我们 ActionBar Tab,下面我们将一步一步的实现下图中的效果。
初次尝试
package com.example.it.studyactionbartab;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] tabNames = {"收藏", "全部"};
//使用getSupportActionBar可以有更好的兼容性
ActionBar actionBar = this.getSupportActionBar();
//设置当前的导航模式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//添加Tab
for (String name : tabNames) {
actionBar.addTab(
actionBar.newTab()
.setText(name)
);
}
}
}
发现问题
上面的代码看起来已经没有异样了,我们来尝试运行,你就会发现是报错了。会出现一下的信息,ActionBar Tab 必须要有一个回调。
解决问题
我们回过头来看看我们的 Tab 还有哪些方法,看来也就是下图所矩形标注的这个方法像是回调函数,那么让我们来看看此方法的的说明。
Set the ActionBar.TabListener that will handle switching to and from this tab. All tabs must have a TabListener set before being added to the ActionBar.
设置一个 ActionBar.TabListener ,他将控制Tab的开关,所有的Tab必须具有 TabListener ,设置在Tab被添加到ActionBar之前。
该方法,不出意外应该就是我们报错的原因,下面让我们来实现它。
package com.example.it.studyactionbartab;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity implements ActionBar.TabListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] tabNames = {"收藏", "全部"};
//使用getSupportActionBar可以有更好的兼容性
ActionBar actionBar = this.getSupportActionBar();
//设置当前的导航模式为TAGS模式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
/*
* 添加Tab
* Note: 必须要添加一个TabListener
* */
for (String name : tabNames) {
actionBar.addTab(
actionBar.newTab()
.setText(name)
.setTabListener(this)
);
}
}
/*
* 当选中TAB 时触发的事件
* */
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
}
/*
* 当 Tab取消选中时触发的事件
* */
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
/*
* 当重复选中TAB时候触发的事件
* */
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
}
完成功能
既然涉及到了多个界面,那么就到我们的Fragment登场了。只是一个Demo就没有复杂的功能,所以一切从简哈。
Note: 在这里 FragmentTransaction 不用提交,系统会自动的帮助我们提交,如果重复的提交就会,抛出异常。
/*
* 当选中TAB 时触发的事件
* */
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
Fragment fragment = null;
switch (String.valueOf(tab.getText())) {
case "收藏":
fragment = new FragmentCollect();
break;
case "全部":
fragment = new FragmentAll();
break;
}
ft.replace(R.id.activity_main, fragment);
// ft.commit();
}
可能遇到的Error
说明 FragmentTransaction 的commit方法重复执行了,在这个回调用我们不需要,进行手动 commit() 系统会自动帮助我们commit().
源码下载
https://git.oschina.net/ShareKnowledge/android_actionbar_tab
Android Actionbar Tab 导航模式的更多相关文章
- Android 原生 Android ActionBar Tab (滑动)导航
本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab ...
- Android ActionBar的Overlay模式如何不遮盖顶部内容的问题
关于actionbar的overlay模式请参考 如何让android的actionbar浮动且透明 一文.这篇文章讲的是如何在这种模式下让actionbar不遮住顶部的内容. 这 一般是这样的场景, ...
- android改动tab 导航 指示器颜色
我事实上想改动的上面的蓝色条条,改成红色. 这个问题实在是困扰我了太长时间.之前參照google的这个文章: https://developer.android.com/training/basics ...
- Android ActionBar
ActionBar 在android3.0中就加入了,但是android3.0适用于平板电脑的,在手机不能使用.android 4.0之后也开始有AndroidBar.所以说要想使用androidBa ...
- Android ActionBar的基本用法
一 说明android 3.0后出现, 在3.0之前称为Title Bar 显示位置在标题栏上可以显示应用程序的图标和activity的标题创建方式的和系统菜单相似, 区别在于: android: ...
- Android actionBar与Fragment结合使用Demo2
上一篇文章介绍了ActionBar的使用,这里介绍ActionBar的还有一种用法.达到的效果和曾经的GroupActivity或TabHost是一样的,可作为导航来使用. 实现效果图: 源码: 布局 ...
- Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航
一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见Actio ...
- Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager
action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...
- Android入门之ActionBar实现Tab导航
效果图: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&qu ...
随机推荐
- R5—字符串处理/正则表达式
R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的 ...
- Linux学习4-信号
信号 信号是Unix和Linux系统响应某些条件而产生的一个条件.接收到该信号的进程会相应的采取一些行动. 信号是由于某些错误条件而生成的,如内存冲突,浮点处理器错误或非法指令等.它们由shell ...
- android安全技术技能清单
大部分android apk都是在裸奔.大部分android程序员,有一些懂得代码混淆,然而,这东西也不靠谱.除去第三方提供的服务的服务的话,大部分android apk就是在裸奔.不过,使用第三方的 ...
- 配置ODBC DSN数据源,导出数据库数据到Excel过程记录
一.前言 工作中我们可能遇到这样的需要:查询数据库中的信息,并将结果导出到Excel文件.这本来没什么,但数据量比较大时,用PLSQL.toad导出Excel会出现内存不足等情况,使用odbc+Mic ...
- Rest-Framework组件源码之认证、频率、权限
一:使用RestFramwork,定义一个视图 from rest_framework.viewsets import ModelViewSet class BookView(ModelViewSet ...
- sql 存储过程导出指定数据到.txt文件(定时)
需求:每天生成一份txt文件数据,供第三方通过http方式调用 方法: 1.新建存储过程: USE [LocojoyMicroMessage] GO /****** Object: StoredPro ...
- 【LinuxC】GCC编译C程序,关闭随机基址
1.编译.链接和运行程序 C代码示例: #include <stdio.h> #include <stdlib.h> int main() { printf("hel ...
- 09 Command Documentation 命令文档
Command Documentation 命令文档 There is a suite of programs to build and process Go source code. Inste ...
- vue总结05 过渡--状态过渡
状态过渡 Vue 的过渡系统提供了非常多简单的方法设置进入.离开和列表的动效.那么对于数据元素本身的动效呢,比如: 数字和运算 颜色的显示 SVG 节点的位置 元素的大小和其他的属性 所有的原始数字都 ...
- 【Android开发日记】之入门篇(五)——Android四大组件之Service
这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...