最近做完了一个客户端项目
外面是个tabhost(用于底部tab栏)每个tab中有一个Activity,这个很普遍。
但有时需要每个tab中有多个页面,也就是说需要 在一个tab中跳转不同的Activity。
当时,我只是简单的在一个Activity中使用了动态布局 (设置layout是否显示)
虽然效果还不错,但实际上依然是同一个Activity,这样的缺点是代码结构会相对复杂,不易维护
今天在网上看到了一篇文章,原文是http://united-coders.com网站的http://united-coders.com/nico-heid/use-android-activitygroup-within-tabhost-to-show-different-activity
特意留下来 供大家和自己以后使用:
Use Android ActivityGroup within TabHost to show different Activity
For that reason you need a ActivityGroup within the Tab where you want to change the Activity.
An ActivityGroup is: A screen that contains and runs multiple embedded activities.
Let's look at this at a real life example. An Android app that shows your podcasts. In the first Activity you get to see all podcasts by subscription. If you touch the subscription, you see the single podcasts you've downloaded for that subscription.
The Tabhost contains three tabs, one for the MediaPlayer, one for the archive and one for available downloads.
-
TabHost tabHost = getTabHost();
-
-
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("Player").setContent(
-
new Intent(this, PlayerActivity.class)));
-
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("Archive").setContent(
-
new Intent(this, ArchiveGroup.class)));
-
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("Updates").setContent(
-
new Intent(this, DownloadList.class)));
The ArchiveGroup takes care which Activity is shown in the second tab. With setContentView you can bring the View to the front.
-
View view = getLocalActivityManager().startActivity("ArchiveActivity",
-
new Intent(this, ArchiveActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
-
-
setContentView(view);
Now all you need to do is to bring another View to the front after an action is triggered. In this case, after a ListItem is clicked.
-
String album = (String) getListView().getItemAtPosition(position);
-
Intent intent = new Intent(getApplicationContext(), ArchiveAlbums.class);
-
intent.putExtra("album", album);
-
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-
-
View view = ArchiveGroup.group.getLocalActivityManager().startActivity("ShowPodcasts", intent).getDecorView();
-
-
ArchiveGroup.group.setContentView(view);
You need to tell the ActivityGroup which view is to be on top and set the appropriate Flag, so that the View will be on top.
Of course now you have to keep track which activity is in front, how they behave and what happens if the back button is pressed. But that gives you room for customizing the behavior.
The full code can be found on github in the GpodRoid project.
Another good tutorials are by H. Larsen and Eric Harlow.
分享到:
相关推荐
有时需要每个tab中有多个页面,也就是说需要 在一个tab中跳转不同的Activity。 当时,我只是简单的在一个Activity中使用了动态布局 (设置layout是否显示) 虽然效果还不错,但实际上依然是同一个Activity,这样的...
TabHost允许开发者在一个Activity中展示多个小部件,每个小部件对应一个单独的Tab,这样用户可以通过点击不同的Tab来切换不同的界面。在这个主题中,我们将深入探讨如何解决TabHost位于底部以及在同一个Tab内管理多...
在Android应用开发中,底部TabHost是一个常见的设计模式,它允许用户通过底部的标签栏轻松地在多个Activity之间切换,从而提升用户体验。本教程将详细讲解如何实现一个自定义的底部TabHost,使得Activity能够在底部...
在Android开发中,`TabHost`是一个非常重要的组件,它用于创建具有多个选项卡的应用界面。每个选项卡通常对应一个不同的`Activity`,这使得用户可以通过点击不同的标签来切换不同的功能区域。然而,在某些场景下,...
在Android开发中,`TabWidget` 和 `TabHost` 是构建多标签界面的重要组件,它们允许用户通过在多个视图间切换来探索不同内容。`TabWidget` 提供了可视化的标签,而 `TabHost` 则是用来管理这些标签以及它们所对应的 ...
在Android应用开发中,TabHost是一种常见的用于实现标签页切换的组件,它允许开发者在一个Activity中展示多个Fragments或者Views,通过不同的标签页来切换显示不同的内容。本篇将深入探讨TabHost的工作原理、实现...
在Android开发中,`TabHost`是一个非常重要的组件,它被用于实现底部导航栏的标签切换功能。`TabHost`提供了在多个小部件之间切换的能力,通常这些小部件是`Fragments`或`Activities`。在给定的场景中,"TabHost底部...
TabHost是Android SDK提供的一种用于构建多标签界面的容器,它允许我们在一个Activity内创建多个Tab,每个Tab对应一个单独的视图或者Fragment。 首先,我们需要了解TabHost的基本结构。TabHost通常由两个主要组件...
它允许你在同一个Activity中切换不同的Fragment或View,每个标签页对应一个单独的内容区域。 1. **TabHost的基本使用**: - 创建TabHost实例:通常在Activity的onCreate()方法中初始化TabHost,设置其ID为`android...
TabHost可以看作是一个容器,它管理多个小窗口(FrameLayout),每个窗口对应一个Tab,而TabWidget则负责显示这些Tab。在"Tab-TabHost.zip_Tabú_tabhost"这个资源中,包含了一个关于如何使用TabHost和TabWidget的...
在Android应用开发中,TabHost通常用于创建带有多个选项卡的应用界面,每个选项卡对应一个Activity,用户可以方便地在不同功能之间切换。然而,在早期的Android版本中,如果每个选项卡都用独立的Activity实现,那么...
在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个选项卡的界面。这篇博客“tabhost 动态改变tab的背景图”探讨了如何在运行时动态地更改TabHost中的各个tab的背景图像。这在设计用户界面时特别有用...
在多 tab 界面中,每个标签可能对应一个子`Activity`,而`ActivityGroup`可以帮助你在同一父`Activity`内管理这些子`Activity`,避免频繁的启动和销毁操作,提高性能。 - `LocalActivityManager`是`ActivityGroup`...
在Android开发中,TabHost是一个非常重要的组件,它允许我们创建具有多个标签(Tab)的界面,每个标签对应一个不同的活动(Activity)或视图(View)。本文将深入讲解如何在Android应用程序中有效地使用TabHost。 ...
在Android开发中,TabHost是一个常用的组件,用于创建带有多个Tab标签的应用界面,每个标签页通常对应一个Activity或Fragment。然而,在实际应用中,我们可能会遇到TabHost的子Activity与主Activity之间通信的问题,...
在Android应用开发中,TabHost是一个非常常用的组件,它用于创建具有多个标签(Tab)的界面,每个标签对应一个不同的Activity。本篇文章将详细介绍如何通过自定义TabHost来实现Activity之间的跳转,以及如何设计一个...
在这个例子中,每个Tab可能会对应一个Activity,当用户点击不同的标签时,Activity会根据TabHost的指示进行切换,展示不同的内容。Activity可以通过`Intent`来启动、切换,同时可以处理用户事件并管理生命周期。 **...
在Android应用开发中,TabHost是一个非常重要的组件,用于创建具有多个标签(Tab)的用户界面,每个标签可以展示不同的内容或功能。TabHost通常与TabWidget结合使用,为用户提供一种便捷的方式来切换不同的视图。...
在描述中提到的源码实例,可能是包含了一个完整的Activity或多个Activity,每个Activity对应一个Tab。源码可能包含了Tab的布局文件,定义了各个Tab的外观,以及对应的Java代码,用于设置TabHost和管理Intent。 学习...