`

TabHost+Fragment分析

阅读更多
总结开发使用tabHost+Fragment的使用步骤:

1、在Activity的布局文件中使用TabHost
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
        <!-- Tabwidget的位置决定了tabhost选项卡的位置,移动到父控件的第一个选项卡在上,反之成立 -->
        <!-- 这是整个选项卡 -->
        <!-- tabStripEnabled选项卡底部没用的部分 -->
        <!-- divider 去除选项卡之间的分割线 -->
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:background="#565656"
            android:tabStripEnabled="false"
            android:divider="@null"
            />

        <FrameLayout
            android:id="@+id/realtabcontent"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
    </LinearLayout>
</TabHost>


2、初始化TabHost控件,并找到每一个选项卡
                tabHost = (TabHost) findViewById(android.R.id.tabhost);
		
		TabWidget tw = (TabWidget) ((LinearLayout) tabHost.getChildAt(0))
				.getChildAt(TAB_UP);
		
		for(int i = 0 ; i < mTabtexts.length ; i ++){
			LinearLayout tab = (LinearLayout) getLayoutInflater().inflate
					(R.layout.tab_indicator, tw, false);
			((ImageView)tab.getChildAt(0)).setImageResource(mImages[i]);
			((TextView)tab.getChildAt(1)).setText(mTabtexts[i]);
			mTabs.add(tab);
		}

                tabHost.setup();//这一步必须有
		tabHost.setOnTabChangedListener(changeListener);


3、添加选项卡的内容
                int i = 0 ;
		for(LinearLayout tab : mTabs)
			tabHost.addTab(tabHost.newTabSpec(mTags[i++])
					.setIndicator(tab)
					.setContent(new TabContent(this)));


4、然后就是选项卡的切换
@Override
	protected void tabChange(String tabId) {
		boy = (BoyFragment) manager.findFragmentByTag(mTags[0]);
		girl = (GirlFragment) manager.findFragmentByTag(mTags[1]);
		
		/** FragmentTransaction 在使用之前使用beginTransaction,每一次使用之后需要commit */
		transaction = manager.beginTransaction();
		detachAll();
		toAttach(tabId);
		// 使用这个方法提交会有一个问题,当外部调用tabhost.setCurrentTab()时,会报错 */
		transaction.commitAllowingStateLoss();
	}
	
	private void detachAll(){
		if (boy != null)
			transaction.detach(boy);
		if (girl != null)
			transaction.detach(girl);
	}
	
	
	private void toAttach(String tag) {
		if(mTags[0].equals(tag)){
			if (boy == null) {
				transaction.add(R.id.realtabcontent, new BoyFragment(), tag); /** 这里创建Fragment对象,并且绑定tag */
			} else {
				transaction.attach(boy);
			}
		}
		else if(mTags[1].equals(tag)){
			if (girl == null) {
				transaction.add(R.id.realtabcontent, new GirlFragment(), tag);
			} else {
				transaction.attach(girl);
			}
		}
	}
分享到:
评论

相关推荐

    AndroidTabhost+Fragment的项目框架

    在Android开发中,构建一个用户友好的界面是至关重要的,`AndroidTabhost+Fragment`的项目框架就是一个典型的实例,它允许开发者创建具有多个视图的多标签应用程序。在这个框架中,`Tabhost`用于管理各个标签,而`...

    ImageView 圆环旋转+仿微信底部TabHost+fragment

    在Android开发中,"ImageView 圆环旋转"和"仿微信底部TabHost+fragment"是两个常见的需求,这里我们将详细探讨这两个知识点。 首先,我们来看"ImageView 圆环旋转"。在Android应用中,有时我们需要实现一个图片在...

    仿微信主界面 Tabhost+Fragment

    很长一段时间没有上传资源了,最近觉得微信的主界面滑动很好用,研究了下,秉着开源...主要有 TabHost + Fragment 来实现。 当然,另一种实现方式是 ViewGroup + ViewPager,异曲同工,不过我这里没有采用这种方式。

    Android代码,TabHost+Fragment实现多标签页,可滑动切换

    本示例介绍如何使用TabHost结合Fragment来实现这一功能,同时支持滑动切换,以适应API级别19及以上的设备。在API 13之后,原生的TabHost组件不再推荐使用,因此我们需要使用更现代的方式来实现类似的功能。 首先,...

    android:TabHost+Fragment

    在Android应用开发中,`TabHost` 和 `Fragment` 是两个关键组件,它们结合使用可以构建出具有多个可切换选项卡的应用界面。本教程将深入探讨如何利用 `android:TabHost` 和 `Fragment` 实现Tab切换功能。 首先,`...

    Fragment + TabHost + RadioGroup 结合DEMO

    在Android应用开发中,`Fragment`、`TabHost`和`RadioGroup`是构建多页面、多选项交互界面的重要组件。下面将详细解释这三个组件及其结合使用的知识点。 首先,`Fragment`是Android 3.0(API级别11)引入的一个重要...

    tabhost + fragment + viewpager +actionbar

    在Android应用开发中,组合使用`TabHost`、`Fragment`、`ViewPager`以及`ActionBar`可以构建出复杂的用户界面,提供丰富的交互体验。这里我们将深入探讨这些组件以及`NetworkImageView`的用法。 首先,`TabHost`是...

    tabhost+fragment+actiob bar+viewpager

    在Android应用开发中,构建一个用户友好的界面是至关重要的,`TabHost`、`Fragment`、`Action Bar`和`ViewPager`都是Android SDK提供的组件,用于创建动态且交互丰富的界面。下面将详细讲解这些组件及其在实际项目中...

    SlidingMenu+TabHost+ViewPage+广告条+地图

    每个标签页通常对应一个独立的活动(Activity)或者视图(Fragment),使得用户可以方便地在不同功能之间切换。开发者可以通过TabSpec类来定义每个标签页,并通过TabHost的setup方法将它们添加到界面上。 3. **...

    主界面tabhost+activitygroup框架

    总的来说,理解和掌握`TabHost`和`ActivityGroup`有助于了解Android的历史和演进,但现代Android开发应优先考虑使用更先进的组件和技术,如`Fragment`和`Jetpack`库,以实现更高效、更稳定的应用。

    TabHost+ViewPager实现滑动tabhost

    每个Tab下的页面可能由`Fragment`实现,如`Page1Fragment`、`Page2Fragment`等,这些Fragment对应TabHost的不同标签。 此外,为了实现滑动切换,可能还会涉及到`OnPageChangeListener`接口的使用,通过实现`...

    Android底部导航栏——FragmentTabHost+ViewPager+Fragment

    它是`TabHost`的一个子类,主要针对API 17及以上版本设计,提供了与`Fragment`交互的能力。`FragmentTabHost`的优点在于可以方便地在不同的`Fragment`间切换,而无需重新加载整个Activity。 接着,我们来了解`...

    webview+fragment与tabhost+多线程等功能的时间线

    在Android开发中,`WebView`、`Fragment`、`TabHost`以及多线程是构建复杂用户界面和优化性能的关键组件。以下是对这些知识点的详细解释: 1. **WebView**: `WebView`是Android SDK提供的一种原生控件,用于在应用...

    FragmentTabHost+Fragment

    `FragmentTabHost`结合了`TabHost`和`Fragment`的优势,使得在不同屏幕尺寸的设备上,尤其是平板电脑,能够更好地展示多面板内容。下面将详细解释`FragmentTabHost`以及如何在Android Studio中使用它来创建选项卡式...

    tabhost + fragment

    在Android开发中,`TabHost`和`Fragment`是两种重要的组件,它们分别用于实现界面的标签切换和模块化布局管理。本示例项目“tabhost + fragment”旨在展示如何结合使用这两种技术来构建一个功能丰富的应用界面。下面...

    FragmentActivity+FragmentTabHost+Fragement替代TabActibvity+TabHost+Activity.rar

    自Android3.2之后,TabActibvity被弃用(Deprecated),取而代之的是FragmentActivity,因为Fragment...原来的TabActibvity+TabHost+Activity那套还可以用,不过强烈建议改用FragmentActivity+FragmentTabHost+Fragement

    tabhost+fragment

    在Android应用开发中,`TabHost`和`Fragment`是两个关键组件,它们共同用于创建具有多标签(Tab)界面的应用。`TabHost`是Android早期版本中的一个控件,用于实现标签页式布局,而`Fragment`是自Android 3.0(API...

    tabhost+radiogroup

    4. 在`OnClickListener`中,根据选中的`RadioButton`来切换显示相应的内容区域,这可以是`Fragment`或者`ViewGroup`。 5. 通过`RadioButton`的状态改变,更新内容区域显示,实现与用户交互的同步反馈。 这种方法的...

    Android例子源码tabhost+activity+slidingMenu

    在实现这个例子时,开发者首先会创建TabHost,并为每个Tab指定对应的Activity或Fragment。然后,他们会集成SlidingMenu,通常是将菜单布局嵌入到主Activity的根布局中,并监听滑动手势。为了使SlidingMenu与TabHost...

Global site tag (gtag.js) - Google Analytics