在iphone开发中貌似有个UITabBarController,(我以为是toolbar,四楼的兄弟更正的),UITabBarController在底部,也有对应的切换效果,都封装好了。但是在android的中,这个东西它在顶部。。。我也不明白为什么这么设计,标新立异?我觉得在底部方便很多,我们的设计也是这样设计的,所以我也只有改咯。

个人认为设计不太好的tabhost,单手拿手机不好操作,不过下面有个兄弟提醒因为有menu的存在,呵呵,我光想不方便了。

整体的思想就是不进行startactivity,而是通过广播发送数据,发送之前切换到对应的tab。从而避免很多startactivity出现的麻烦,比如tabwidget不见了,跳转黑屏等等。。。弹出窗可以获取到tabwidget对应的标签位置,设置其监听事件,阻塞掉原本tabwidget的切换就可以了。

先把这些tab挪到底部去。布局代码如下:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"android:id="@android:id/tabhost"   android:layout_width="fill_parent"android:layout_height="fill_parent">  <LinearLayout android:orientation="vertical"android:layout_width="fill_parent"   android:layout_height="fill_parent">  <FrameLayout android:id="@android:id/tabcontent"android:layout_width="fill_parent"     android:layout_height="0dip"android:layout_weight="1" />  <TabWidget android:id="@android:id/tabs"android:layout_width="fill_parent"    android:layout_height="wrap_content"/></LinearLayout></TabHost>

注意每个控件的相对位置,位置对了,那个鬼东西才能跑底部去,自定义的tabhost就是如此了。。。

然后上代码。。。
public class TabManager extends TabActivity
网上很多人说不要继承tabactivity,否则不能自定义tabhost,但在这就是这样做了,也没错。还是自己实践比较好,别盲目转帖。
有人提醒的,多谢:楼主误解了,其实网上说的是不能继承tabactivity,否则不能自定义tabhost名。 你这边继承了Tabactivity, 同时布局文件中又用了android:id="@android:id/tabhost" ,所以你没错。你可以改下这个ID试试,一改就错了。 如果想要自定义这个ID,就不能继承TabActivity。
我也没试了,大家有空去试试。。。
Constant.tabHost = (TabHost) findViewById(android.R.id.tabhost);LayoutInflater.from(this).inflate(R.layout.tabcontent,Constant.tabHost.getTabContentView(), true);tabWidget = Constant.tabHost.getTabWidget();Constant.tabHost.addTab(Constant.tabHost.newTabSpec("tab1").setIndicator("Tab1",th.getResources().getDrawable(R.drawable.ic_menu_home_tab)).setContent(new Intent(this, Tab1.class)));

View v = tabWidget.getChildAt(i);
// 设置tab背景颜色 外层有个循环,每个tab都要设置一次
v.setBackgroundResource(R.drawable.tab_indicator);tab_indicator文件:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><!-- Non focused states --><item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@color/tab_unselected" /><item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@color/tab_selected" /><!-- Focused states --><item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@color/tab_focus" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@color/tab_focus" /><!-- Pressed --><item android:state_pressed="true" android:drawable="@color/tab_press"/></selector>

下面是弹出窗口的

View view = tabWidget.getChildAt(4);view.setOnClickListener(new OnClickListener() {

获取到你要弹出窗口的标签,设置setOnClickListener事件,就可以阻塞掉tabhost原本的事件。达到弹出窗口的效果。

Constant.tabHost = (TabHost) findViewById(android.R.id.tabhost);
Constant.tabHost.setCurrentTab(0);跳转就可以是这样做了。
Constant.tabHost 是全局变量,这个是关键,为了切换tab不会出现黑屏跳转效果。
txTextView.setText("点击切换到tab3");txTextView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Constant.tabHost.setCurrentTab(2);//这里是全局变量的tabhost
 Intent intent = new Intent("com.niushu.recbroad");intent.putExtra("id","从tab1过来的牛叔");Tab1.this.sendBroadcast(intent);}});

这个是在tab1中点击文字,首先切换到对应的tab,Constant.tabHost.setCurrentTab(2);,启动对应的activity,然后发送广播。用这个方Constant.tabHost.setCurrentTab切换,就没有那些乱七八糟的麻烦。
如果发送广播过去之后,接下来要用线程操作的话,最好在建一个标志位,全局变量的。避免一些线程跟广播资源之间的冲突。
下面是接受广播的代码:需要注意在生命周期方法中注册和注销广播接收器
public class Broad extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {disid_Broad = intent.getStringExtra("id");Toast.makeText(Tab3.this, disid_Broad, 1).show();Log.i("Broad", "onReceive");}}

转载于:https://www.cnblogs.com/vus520/archive/2012/03/22/2561972.html

TabActivity中子Activity相互跳转,及某个Tab需弹出窗的解决方案相关推荐

  1. Android activity相互跳转

    Android activity相互跳转 学习目标: 请你设计一个简单的问卷,界面自行设计,要求有较好的显示效果 功能要求: 1.输入昵称(不能为空) 2.选择性别 3.问卷内容 "你最喜欢 ...

  2. Activity相互跳转出现重复调用OnCreate()的异常情况

    真的是浪费时间啊,此处埋坑以防再犯 今天在做分享功能的时候,发现跳转到分享页面再返回到之前页面时,整个页面会重新加载,出现一系列问题就不说了,而且友盟分享的回调提示也没有弹出来,很奇怪,打了个Log, ...

  3. Activity的用法(三):开启网页 (没有弹出浏览器,不清楚是什么原因)

    用这个例子,但是总是没有弹出浏览器,不清楚是什么原因 package com.example.activity_and_service;import android.app.Activity; imp ...

  4. html弹框确定后才跳转链接,怎么用div弹出一个确认页面,点击确定跳到另外一个页面,取消则div隐藏...

    满意答案 ww252378666 2013.10.15 采纳率:43%    等级:12 已帮助:6809人 你看下,是不是想要的如下效果: 查看请点退出按钮: 后台管理系统APP专业版 functi ...

  5. 安卓开发弹窗activity风格_安卓两种底部弹出窗dialog实现方式

    [实例简介]安卓两种底部弹出窗dialog实现方式,一种是列表弹窗实现,2是灵活底部弹窗,传入布局以及控件id [实例截图] [核心代码] package com.kx.kxbottomdialog; ...

  6. activity从底部弹出动画

    要实现activity从底部弹出的动画,一般参考这篇博文就能实现: http://blog.csdn.net/spy19881201/article/details/5861193 但是我的需要还有点 ...

  7. Android 锁屏,息屏情况下打开界面Activity类似微信视频通话接电话时弹出接电话的界面

    Android 锁屏,息屏情况下打开界面Activity,类似微信视频通话接电话时弹出接电话的界面 https://blog.csdn.net/yingtian648/article/details/ ...

  8. android 之 使用显示意图和隐式意图完成Activity的跳转

    通过显示意图激活目标组件的方式有: 1.通过构造函数 intent = new Intent(启动源,启动目标): 实例见:博客    ==>android 之Activity间的相互跳转   ...

  9. Android面试:ActivityA与ActivityB相互跳转对应生命周期变化

    一.ActivityA与ActivityB相互跳转对应生命周期变化 1.ActivityA 跳转 ActivityB,A 与 B 均不透明,生命周期变化 A:onPause B:onCreate -& ...

最新文章

  1. Leetcode: Reverse Linked List II
  2. 配置BGP本地优先级
  3. Linux 文件系统概述
  4. 库存管理-历史库存和收发存系列-俄罗斯库存报表J3RFLVMOBVED1
  5. easy excel date 类型解析报错_ptarchiver原理解析
  6. BugkuCTF-Crypto题小山丘的秘密
  7. [环境] OpenAI gym经典控制环境CartPole-v0 介绍
  8. 6.5bert的家族成员-百度的ERNIE,ERNIE2.0,清华的ERNIE,RoBERTa,BERT-WWM,UniLM,MASS,TinyBERT,ELECTRA,SpanBERT
  9. 计算机考研复试面试题整理
  10. Hardhat以太坊智能合约开发框架基础教程
  11. 指数基金投资指南读书笔记
  12. 想开咖啡店要怎么入手?
  13. docker安装报错:docker-ce conflicts with 2:docker-1.13.1-208.git7d71120.el7_9.x86_64
  14. java jtextarea 事件_JTextArea的事件处理2
  15. C语言剖析OC的rangeOfString方法
  16. anyconnect免密码登录
  17. 微信小程序云存储中调用fileid作为图片路径,无法正常显示解决方法
  18. 如果在天堂遇见你,你还记不记得我是谁?
  19. SDNU1129.多度人脉
  20. Hydra – Brute Force HTTP(S)

热门文章

  1. Swing 学习小记
  2. 算法中的Strassen矩阵乘法
  3. C和汇编混合编程---栈平衡
  4. 11g oracle xe启动_详解Oracle等待事件的分类、发现及优化
  5. 排序算法时间复杂度和稳定性
  6. 在使用 python 封装的进程池 from concurrent.futures import ProcessPoolExecutor 遇到的问题
  7. django contrib 包简介
  8. axure8.0导出页面打不开问题_excel怎么转pdf?excel打不开?转换成PDF就行了
  9. C++中结构体和类的区别和联系
  10. Insertion Sort——打表找规律