使用ActionBar Tab(地址)

本文实现将页面分为多个选项卡,并在每一个选项卡中显示一个ListView。

创建新Layout - ActionbarTab.axml, 并向页面中添加FrameLayout控件。 页面源代码如下:

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<FrameLayout
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/frameLayout1" />
</LinearLayout>

创建新Layout - ListViewLayout.axml, 这个Layout用于定义嵌在Frame - frameLayout1中的ListView控件。 在页面中添加ListView控件 - Id是myList。页面源代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/myList" />
</LinearLayout>

向项目中添加新Activity - ActionbarTabActivity.cs, 在Activity中实现新Tab的创建。

  1. Oncreate()方法中,关联前端UI.

    SetContentView(Resource.Layout.ActionbarTab);
  2. 设置页面导航模式为Tabs.

    this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
  3. 定义新AddTab方法, 将新创建的Fragment View添加到页面控件frameLayout1中。

    void AddTab(string tabText, int iconResourceId, Fragment view)
    {
    var tab = this.ActionBar.NewTab();
    tab.SetText(tabText);
    tab.SetIcon(iconResourceId); tab.TabSelected += delegate (object sender, ActionBar.TabEventArgs e)
    {
    var fragment = this.FragmentManager.FindFragmentById(Resource.Id.frameLayout1);
    if (fragment != null)
    e.FragmentTransaction.Remove(fragment);
    e.FragmentTransaction.Add(Resource.Id.frameLayout1, view);
    };
    tab.TabUnselected += delegate (object sender, ActionBar.TabEventArgs e)
    {
    e.FragmentTransaction.Remove(view);
    }; this.ActionBar.AddTab(tab);
    }
  4. 定义两个新Fragment类(此处仅demo一个),继承基类Fragment。Fragment类似于子Activity, 这两个Fragment的作用是操作两个Tab页面中的控件。

    public class firstFragment:Fragment
    {
    List<string> Sources = null; public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
    base.OnCreateView(inflater, container, savedInstanceState);
    var view = inflater.Inflate(Resource.Layout.ListViewlayout, container, false);
    ListView myList = view.FindViewById<ListView>(Resource.Id.myList); Sources = new List<string>();
    for(int i = 1; i<=10;i++)
    {
    Sources.Add(string.Format(@"item {0}", i));
    }
    ArrayAdapter<string> adapter = new ArrayAdapter<string>(this.Activity,
    global::Android.Resource.Layout.SimpleListItem1, Sources);
    myList.SetAdapter(adapter);
    myList.ItemClick += ListClick;
    } void ListClick(object sender, AdapterView.ItemClickEventArgs e)
    {
    ListView list = sender as ListView;
    string selectedFromList = list.GetItemAtPosition(e.Position).ToString();
    }
    }

    以上代码中需要注意, ArrayAdapter的第一参数在Fragment中是this.Activity, 而在Activity中是thisFindViewById()修改为view.FindViewById()

  5. 添加新Tab.

    AddTab("list1", Resource.Drawable.Icon, new firstFragment());

ActionbarTabActivity 源代码如下:

[Activity(Label = "ActionbarTabActivity")]
public class ActionbarTabActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Create your application here
SetContentView(Resource.Layout.ActionbarTab);
this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs; AddTab("list1", Resource.Drawable.Icon, new firstFragment());
if(bundle!=null)
this.ActionBar.SelectTab(this.ActionBar.GetTabAt(bundle.GetInt("tab")));
}
protected override void OnSaveInstanceState(Bundle outState)
{
outState.PutInt("tab", this.ActionBar.SelectedNavigationIndex);
base.OnSaveInstanceState(outState);
}
void AddTab(string tabText, int iconResourceId, Fragment view)
{
var tab = this.ActionBar.NewTab();
tab.SetText(tabText);
tab.SetIcon(iconResourceId); tab.TabSelected += delegate (object sender, ActionBar.TabEventArgs e)
{
var fragment = this.FragmentManager.FindFragmentById(Resource.Id.frameLayout1);
if (fragment != null)
e.FragmentTransaction.Remove(fragment);
e.FragmentTransaction.Add(Resource.Id.frameLayout1, view);
};
tab.TabUnselected += delegate (object sender, ActionBar.TabEventArgs e)
{
e.FragmentTransaction.Remove(view);
}; this.ActionBar.AddTab(tab); } public class firstFragment:Fragment
{
List<string> Sources = null; public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = inflater.Inflate(Resource.Layout.ListViewlayout, container, false);
ListView myList = view.FindViewById<ListView>(Resource.Id.myList); Sources = new List<string>();
for(int i = 1; i<=10;i++)
{
Sources.Add(string.Format(@"item {0}", i));
}
ArrayAdapter<string> adapter = new ArrayAdapter<string>(this.Activity,
global::Android.Resource.Layout.SimpleListItem1, Sources);
myList.SetAdapter(adapter);
myList.ItemClick += ListClick; return view;
} void ListClick(object sender, AdapterView.ItemClickEventArgs e)
{
ListView list = sender as ListView;
string selectedFromList = list.GetItemAtPosition(e.Position).ToString();
}
}
}

使用ActionBar Tab的更多相关文章

  1. Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager

    action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...

  2. ActionBar +Tab+ViewPager +Fragment 支持侧滑动完成办税工具的页面展示

    1:fragment_zhqrl.xml(征期日历) <?xml version="1.0" encoding="utf-8"?> <Line ...

  3. 15 ActionBar.Tab 以及保存fragment对象 代码案例

    API 21弃用 values 中 string文件源码: <?xml version="1.0" encoding="utf-8"?> <r ...

  4. Android 原生 Android ActionBar Tab (滑动)导航

    本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab ...

  5. Android Actionbar Tab 导航模式

    Android Actionbar Tab 下图中,红色矩形圈起来的就是我们 ActionBar Tab,下面我们将一步一步的实现下图中的效果. 初次尝试 package com.example.it ...

  6. Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航

    一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见Actio ...

  7. actionbar tab 字体大小设置

    在styles.xml文件里加入以下的样式就可以 <!-- Application theme. -->     <style name="AppTheme" p ...

  8. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  9. Android ActionBar 关于tab的应用 以及 TabListener的方法详解

    actionBar的tab标签应用以及TabListener的方法详解 package com.example.actionBarTest.actionBarTab; import android.a ...

随机推荐

  1. 坑备忘error: expected class-name before '{' token

    今日重构之前的代码,修改了命名空间,然后一处派生的子类定义处总是总是报error: expected class-name before '{' token,网上查了查原因,出现这种情况大致有两种情况 ...

  2. 本地hosts临时域名访问

    当刚购买了空间,域名和空间还未进行绑定,可以用临时域名访问主机调试网站.您可通过本地hosts指向访问网站,具体方法如下: 特别说明:设置以后,只有当前设置的电脑才能访问,其他电脑访问无效. 第一步: ...

  3. win7优化

  4. java 调用 scala

    1 scala 方法的输入输出不能有 jdk 不可识别的类型(如:Int,Float,Any 等是不行的,Unit 对应到 void 是可以的.) http://rwh.readthedocs.org ...

  5. java集合中的传值和传引用

    在学习java集合过程中发现了传值和传引用的区别: 我们来看下面两句话 ●java集合就像一种容器,我们可以把多个对象(实际上是对象的引用),丢进该容器.(来自疯狂java讲义) ●当使用Iterat ...

  6. FastReport4.6 组件安装

    要完整版不是官方版的试用版.下面包括有的文件 安装前请册除原有的FR控件. 1. "Tools|Environmet options..."中的"Library" ...

  7. MFC之鼠标消息处理

    今天学了点MFC的鼠标处理.用鼠标处理编写了一个小程序.在文本窗口内,绘制鼠标移动轨迹,当按下CTRL键时鼠标将变成十字,并且填充为蓝色的矩形. 第一步:建立单文的MFC程序,添加类CMouseDem ...

  8. js初学者的div移动

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  9. BPM业务流程管理与SAP如何更好集成整合?

    深圳市有方科技有限公司是一家专注于M2M物联网无线通信产品和服务的国家级高新技术企业.有方科技专注于无线应用需求的挖掘和实现,拥有产品规划.工业设计.结构.硬件.软件.测试.ID.物流等完整的研发及设 ...

  10. C++小项目:directx11图形程序(五):shadersclass

    这个类是用来创建着色器并设置输入布局的. 这个类比较特殊,它创建的着色器与Effect文件有关,effect文件是用高级着色语言(hlsl)编写的. shadersclass.h #pragma on ...