android tabhost 多个activity,Android:TabHost中Activity的生命周期问题

用过TabHost制作多个activity的分页效果的朋友应该知道,tabhost中镶嵌的activity的onCreate和onDestroy是和tabhost关联的,在创建了tabhost之后,第一次访问某个activity会执行这个activity的oncreate事件,以后切回来时只会执行onResume事件。而一般情况下tabhost内的activtiy的onDestroy事件会在调用tabhost的onDestroy时统一调用。

但是我今天遇到一个问题。我想实现一个动态加载Tabhost内的Activity的效果,即:假设这个Tabhost内有两个tab页tab1和tab2,分别放置Tab1Activy和Tab2Activity,在点击了tab1内的按钮后我要把tab2变成tab3,tab3内放置Tab3Activty。现在我跟踪Tab3Activity的生命周期,很神奇的发现每次在tab1和tab3之间切换时,Tab3Activity都会调用onDestroy和onCreate方法,这是怎么回事呢? 附上我动态修改Tab页的代码。

MainActivity

package com.example.tabhostdemo;

import java.util.ArrayList;

import android.os.Bundle;

import android.app.Activity;

import android.app.LocalActivityManager;

import android.app.TabActivity;

import android.content.Intent;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.View;

import android.widget.TabHost;

import android.widget.TabHost.TabSpec;public classMainActivity extends TabActivity {public staticTabHost mtabHost;public static ArrayList lSpecs=new ArrayList();

@Overrideprotected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mtabHost=this.getTabHost();

LayoutInflater inflater=LayoutInflater.from(this);

//将创建的TabSpec对象加入数组

TabSpec tabSpec=mtabHost.newTabSpec("1").setIndicator("TAB1").setContent(new Intent(this, Tab1Activity.class));

mtabHost.addTab(tabSpec);

lSpecs.add(tabSpec);

tabSpec=mtabHost.newTabSpec("2").setIndicator("tab2").setContent(new Intent(this, Tab2Activity.class));

mtabHost.addTab(tabSpec);

lSpecs.add(tabSpec);

tabSpec=mtabHost.newTabSpec("2").setIndicator("tab3").setContent(new Intent(this, Tab3Activity.class));

lSpecs.add(tabSpec);

}

@Overridepublicboolean onCreateOptionsMenu(Menu menu) {//Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);return true;

}

}

Tab1Activity:

package com.example.tabhostdemo;

import java.util.ArrayList;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.TabHost;

import android.widget.Toast;

import android.widget.TabHost.TabSpec;public classTab1Activity extends Activity {

TabHost mtabHost;

ArrayList lSpecs=new ArrayList();

@Overrideprotected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.tab1);

mtabHost=MainActivity.mtabHost;//获取tabhost对象

lSpecs=MainActivity.lSpecs;//获取所有的Tabspecs对象

Log.i("11","tab1 onstart");

}public voidbtn_tab1_onclick(View v) {

mtabHost.clearAllTabs();//清空 重新添加

mtabHost.addTab(lSpecs.get(1));

mtabHost.addTab(lSpecs.get(2));//Toast.makeText(this, "tab1", Toast.LENGTH_LONG).show();

}

@Overridepublic voidonResume() {

Log.i("11","tab1 onresume");

super.onResume();

}

@Overrideprotected voidonDestroy() {//TODO Auto-generated method stub

Log.i("11","tab1 ondestroy");

super.onDestroy();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站决策分析软件WebBI

为了提高网站的访问量、黏合度,网站的管理者投入大量的精力于市场推广、内容发布、网站业务改进等,而对于如何评估推广效果、如何了解网民的行为以提高网站的吸引力和服务质量很多网站都显的无力可施。经过互联网多年的发展,互联网网站之间的…

eclipse启动报错No java virtual machine was found after seearching the locations:XXXXX

一、问题描述 卸载之前的老版本JDK后,重新安装了JDK,再次打开eclipse出现以下问题:在指定的目录中找不到JDK虚拟机。 二、解决办法 eclipse启动时会根据eclipse.ini配置文件来找javaw.exe 启动ecplise GUI。 在eclipse安装的根目录中找到e…

网卡配置

网卡配置文件 (1)/etc/sysconfig/network-scripts/ifcfg-interface-name 配置文件ifcfg-interface-name包含了初始化接口所需的大部分详细信息。其中interface-name将根据网卡的类型和排序而不同,一般其名字为eth0、eth1、ppp0等&#xff0c…

linux ace platform_linux.gnu,Linux下配置和使用ACE笔记

1. 下载 ACE 5.7.从 http://download.dre.vanderbilt.edu/ 下载 ACETAOCIAO-5.7.tar.gz包。2. 解压将压缩包copy到linux目录/data/ACE里,然后解压, tar -zxvf ACETAOCIAO-5.7.tar.gz。解压后的目录是 /data/ACE_wrappers.3. 配置config.h和platform_macros.GNU。…

Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍

From: http://fedora.linuxsir.org/main/?qnode/41 作者:北南南北 来自:LinuxSir.Org 提要:Linux 磁盘分区表、文件系统的查看、统计的工具很多,有些工具是多功能的,不仅仅是查看磁盘的分区表,而且也能进行…

Android 机顶盒手势、数据分页演示DEMO

上篇讲了一篇机顶盒的一个封装类《GridView》,利用这个封装的GridView 可以实现一些例如移动、位移图标等基础组件“GridView”无法实现的一些功能。本篇将会提出一部分可供运行的代码演示一个分页、手势换屏的DEMO版本,供大家学习。 DEMO 的工程目录如下…

Java jdk中的部分工具javac javaw javaws javadoc javah javap jar jdb jps的作用

一、JDK 工具和实用程序 JDK提供的标准工具和程序 基本工具:javac, java, javadoc, apt, appletviewer, jar, jdb, javah, javap, extcheck安全工具:keytool, jarsigner, policytool, kinit, klist, ktab国际化工具:native2ascii远程方法调…

firefox android 去更新,Android版Firefox Beta发布更新

就在谷歌I/O大会前夕,Android版Firefox Beta悄悄的发布了一次更新。更新内容包括:Flash支持(虽然事实上在上个月的更新中就已经支持了)以及日常bug修复及稳定性提升等,不过依然没有加入复制和粘贴功能。此外Firefox Beta的UI界面也被重新设计…

Linux/UNIX的scp命令用法详解

From: http://www.ha97.com/4169.html PS:偶很喜欢用scp这个命令来传输数据。scp命令跟cp命令类似,只不过cp命令是在同一台机器上用的,scp是在两台机器上复制传输数据的命令。scp实质相当于利用SSH协议来传输数据的cp命令。 用法举例&#xf…

React开发(230):ant design table固定表头

固定表头 方便一页内展示大量数据。需要指定 column 的 width 属性,否则列头和内容可能不对齐。 如果指定 width 不生效或出现白色垂直空隙, 请尝试建议留一列不设宽度以适应弹性布局,或者检查是否有超长连续字段破坏布局。

安装ARM交叉编译工具

1. 下载交叉编译工具链。 可到如下两个网站下载: http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/ http://www.uushare.com/user/zyh006814/file/1434053 2. 安装 # mkdir /usr/local/arm # cd /usr/local/arm # 解压下载的工具链 # 添加环境变量&#xff0c…

Linux下获得线程ID syscall(224)

From: http://blog.163.com/onx0320126/blog/static/164736436201252574720314/ 对于Linux线程,也许大家并不陌生,而我们通常所说的线程是指基于POSIX标准的线程,而Linux下除了兼容POSIX标准,而且提供线程在内核级的支持。早在Lin…

Qt中常用的QChar QByteArry QString数据类型转换方法

一、QChar类型 转 QByteArry类型 char mybuffer[mybufferSize]; QByteArray ByteData QByteArray(mybuffer, mybufferSize);二、QByteArry类型 转 QString类型 QByteArray _byte; QString string,_string1; string QString(_byte); _string1 QString(_byte.toH…

android studio 安装问题,解决Android Studio的安装问题

今天开始了android studio的下载与安装,我再官网上下载了Android studio,下载不难,运行出来可需要一定的时间,在中途中我遇到了一些问题一:Build错误:在我最开始下载完Android studio时,我新建项目的时候&a…

React开发(231):常见手机号邮箱的正则

// 手机号 const isPhone /^1[3-9]\d{9}$/; // const isPhone /(\d{3}-|\d{4}-)?(\d{8}|\d{7})?/;// 邮箱 const isEmail /^([A-Za-z0-9_\-\.])\([A-Za-z0-9_\-\.])\.([A-Za-z]{2,4})$/; // 密码格式 const isPassword /^[\w~!#$%^&*()-|\\<>,.?/\[\]{}:;&qu…

用JS访问iframe中的元素

用JS访问iframe中的元素 &#xff11;.首先&#xff0c;如何访问iframe中的元素&#xff1f;见如下代码&#xff1a;(1)1.htm源码&#xff1a;<input typebutton value"test" οnclick"self.frames[a].document.all.mybutton.disabledtrue"> <…

诺基亚7原生android,【诺基亚7Plus评测】系统:简洁原生安卓功能却不简单_诺基亚 7 Plus(4GB RAM/全网通)_手机评测-中关村在线...

系统&#xff1a;简洁原生安卓功能却不简单诺基亚 7 Plus的系统为Android 8.0&#xff0c;与国内厂商大刀阔斧的定制化相反&#xff0c;诺基亚 7 Plus的系统几近原生&#xff0c;仅仅内置了微信、微博、支付宝三款国民应用&#xff0c;而且这三个软件都可以卸载&#xff0c;最大…

React开发(232):传参可以转变思路

handleSearch (values) > {console.log(values, values);let startDate (values?.startTime && new Date(values?.startTime[0]).getTime()) || ;let endDate (values?.startTime && new Date(values?.startTime[1]).getTime()) || ;let checkStartD…