`

2013.03.19(2)———android ActivityGroup的使用

阅读更多
2013.03.19(2)———android ActivityGroup的使用

参考:http://hkp.iteye.com/blog/1185482

场景:现在我需要在tab里面进行activity的跳转,但是tab工具栏仍然要显示,也就是一个tab的内部activity跳转

平常写的tab,不管是button、gridview或者radiogroup,在对应的activity点击跳转之后,就直接跳出tab了 ,然后 我就google了下,发现大家都说用ActivityGroup,我就参见上面的链接,写了一个简单例子

1、tab

布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<TabHost 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android">

    <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="0.0dip"
        android:layout_weight="1.0" />

        <TabWidget 
        android:id="@android:id/tabs" 
        android:visibility="gone"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.0" />

        <RadioGroup 
        android:id="@+id/more_tab_radiogroup"
        android:gravity="center_vertical"
        android:layout_gravity="bottom" 
        android:orientation="horizontal"
        android:padding="2dip"
        android:background="@drawable/tab_background"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">

            <RadioButton 
                android:id="@+id/more_tab_rdo_my"
                android:text="@string/tab_my"
                android:drawableTop="@drawable/tab_icon_my" 
                style="@style/tab_item_background"
                android:checked="true" 
                />

            <RadioButton 
                android:id="@+id/more_tab_rdo_attention"
                android:text="@string/tab_attention"
                android:drawableTop="@drawable/tab_icon_attention" 
                style="@style/tab_item_background" />

            <RadioButton 
                android:id="@+id/more_tab_rdo_camera"
                android:text="@string/tab_camera"
                android:drawableTop="@drawable/tab_icon_camera" 
                style="@style/tab_item_background" />

            <RadioButton
                android:id="@+id/more_tab_rdo_piazza" 
                android:text="@string/tab_piazza"
                android:drawableTop="@drawable/tab_icon_piazza" 
                style="@style/tab_item_background" />

            <RadioButton 
                android:id="@+id/more_tab_rdo_more"
                android:text="@string/tab_more"
                android:drawableTop="@drawable/tab_icon_more" 
                style="@style/tab_item_background" />

        </RadioGroup>

    </LinearLayout>

</TabHost>



MainTabActivity.java

package com.wmyc.activity;

import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost;

public class MainTabActivity extends TabActivity implements BaseInterface,OnCheckedChangeListener{
    //================log标记=====================
    private final static String TAG = MainTabActivity.class.getSimpleName();

    //================一些常量=====================
    private final static int TAB_MY = 0;
    private final static int TAB_ATTENTION = 1;
    private final static int TAB_CAMERA = 2;
    private final static int TAB_PIAZZA = 3;
    private final static int TAB_MORE = 4;

    //================界面相关=====================
    private Context _context;
    private RadioGroup mRadioGroup;
    private TabHost mTabHost;

    //================逻辑相关=====================
    //当前选中的tab
    private int mCurrentIndex;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_tab);

        this.initVars();
        this.initComponent();
        this.loadData();
    }

    @Override
    public void initVars() {
        _context = this;

        mCurrentIndex = TAB_MY;
    }

    @Override
    public void initComponent() {
        mRadioGroup = (RadioGroup)findViewById(R.id.more_tab_radiogroup);
        mRadioGroup.setOnCheckedChangeListener(this);
        initTabHost();
    }

    @Override
    public void loadData() {

    }

    private void initTabHost() {
        mTabHost = getTabHost();
        mTabHost.addTab(mTabHost.newTabSpec("tab my").setIndicator("")
                .setContent(new Intent(this, FirstGroupTab.class)));
        mTabHost.addTab(mTabHost.newTabSpec("tab attention").setIndicator("")
                .setContent(new Intent(this, SecondTab.class)));
        mTabHost.addTab(mTabHost.newTabSpec("tab camera").setIndicator("")
                .setContent(new Intent(this, SecondTab.class)));
        mTabHost.addTab(mTabHost.newTabSpec("tab piazza").setIndicator("")
                .setContent(new Intent(this, SecondTab.class)));
        mTabHost.addTab(mTabHost.newTabSpec("tab more").setIndicator("")
                .setContent(new Intent(this, SecondTab.class)));

        mTabHost.setCurrentTab(mCurrentIndex);

    }

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        switch(checkedId){
        case R.id.more_tab_rdo_my:
            mCurrentIndex = TAB_MY;
            break;
        case R.id.more_tab_rdo_attention:
            mCurrentIndex = TAB_ATTENTION;
            break;
        case R.id.more_tab_rdo_camera:
            mCurrentIndex = TAB_CAMERA;
            break;
        case R.id.more_tab_rdo_piazza:
            mCurrentIndex = TAB_PIAZZA;
            break;
        case R.id.more_tab_rdo_more:
            mCurrentIndex = TAB_MORE;
            break;
        }
        mTabHost.setCurrentTab(mCurrentIndex);
    }

}


2、FirstTabGroup.java

/**
 * 
 */
package com.wmyc.activity;

import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;

/**
 * @author HuangKaipeng hkp2006@gmail.com
 * 2011-10-5
 *
 */
public class FirstGroupTab extends ActivityGroup {

    /**
     * 一个静态的ActivityGroup变量,用于管理本Group中的Activity
     */
    public static ActivityGroup group;
    public static int currentIndex;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        System.out.println("======FirstGroupTab onCreate=============");
        group = this;
        currentIndex = 1;
    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
//      super.onBackPressed();
        //把后退事件交给子Activity处理
        group.getLocalActivityManager()
            .getCurrentActivity().onBackPressed();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        System.out.println("======FirstGroupTab onResume=============");
        //把界面切换放到onResume方法中是因为,从其他选项卡切换回来时,
        //调用搞得是onResume方法

        //要跳转的界面
        Intent intent = null;
        if(currentIndex==1){
            intent = new Intent(this,FirstActivity.class).
                  addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        }else{
            intent = new Intent(this,SecondActivity.class).
            addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        }
        //把一个Activity转换成一个View
        Window w = group.getLocalActivityManager().startActivity(""+currentIndex,intent);
        View view = w.getDecorView();
        //把View添加大ActivityGroup中
        group.setContentView(view);
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("======FirstGroupTab onPause=============");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("======FirstGroupTab onStop=============");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("======FirstGroupTab onDestroy=============");
    }
}


 


3、FirstActivity

/**
 * 
 */
package com.wmyc.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;

/**
 * @author HuangKaipeng hkp2006@gmail.com
 * 2011-10-5
 *
 */
public class FirstActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        System.out.println("======FirstActivity onCreate=============");
        setContentView(R.layout.first_activity);
        Bundle data = getIntent().getExtras();
//      System.out.println("result: " + data.getInt("aaa"));
        //跳转到第二个界面
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                //把一个Activity转换成一个View
                Window w = MyActivityGroup._group.getLocalActivityManager()
                        .startActivity(MyActivityGroup.STR_PRE+ 3,intent);

                View view = w.getDecorView();
                Animation hyperspaceJump = AnimationUtils.loadAnimation(FirstActivity.this,  
                        R.anim.translucent_exit);
                FirstActivity.this.getWindow().getDecorView().startAnimation(hyperspaceJump);
                hyperspaceJump = AnimationUtils.loadAnimation(FirstActivity.this,  
                        R.anim.translucent_enter);
                view.startAnimation(hyperspaceJump);
                //把View添加大ActivityGroup中
                MyActivityGroup._group.setContentView(view);
                MyActivityGroup.currentIndex = 3;
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("======FirstActivity onStart=============");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("======FirstActivity onRestart=============");
    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("======FirstActivity onResume=============");
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("======FirstActivity onPause=============");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("======FirstActivity onStop=============");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("======FirstActivity onDestroy=============");
    }

}


4、SecondActivity.java

/**
 * 
 */
package com.wmyc.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;

/**
 * @author HuangKaipeng hkp2006@gmail.com
 * 2011-10-5
 *
 */
public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        System.out.println("======SecondActivity onCreate=============");
        setContentView(R.layout.second_activity);
        Button btn = (Button)this.findViewById(R.id.second_btn);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SecondActivity.this, MyMainActivity.class);

                Window w = MyActivityGroup._group.getLocalActivityManager()
                        .startActivity(MyActivityGroup.STR_PRE + 1,intent);
                View view = w.getDecorView();
                MyActivityGroup._group.setContentView(view);
                MyActivityGroup._group.getLocalActivityManager().destroyActivity(MyActivityGroup.STR_PRE + MyActivityGroup.currentIndex, true);
                MyActivityGroup.currentIndex = 1;
            }
        });
    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
//      super.onBackPressed();
        //后退跳转到第一个Activity界面
        Intent intent = new Intent(this, MyMainActivity.class);

        Window w = MyActivityGroup._group.getLocalActivityManager()
                .startActivity(MyActivityGroup.STR_PRE + 1,intent);
        View view = w.getDecorView();
        MyActivityGroup._group.setContentView(view);
        MyActivityGroup.currentIndex = 1;
    }
    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("======SecondActivity onStart=============");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("======SecondActivity onRestart=============");
    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("======SecondActivity onResume=============");
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("======SecondActivity onPause=============");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("======SecondActivity onStop=============");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("======SecondActivity onDestroy=============");
    }
}





SecondTab.java 就不写了,很简单一个页面
分享到:
评论
2 楼 lipeng88213 2013-10-17  
路归途 写道
  Animation hyperspaceJump = AnimationUtils.loadAnimation(FirstActivity.this,   
                        R.anim.translucent_exit); 
                FirstActivity.this.getWindow().getDecorView().startAnimation(hyperspaceJump); 
                hyperspaceJump = AnimationUtils.loadAnimation(FirstActivity.this,   
                        R.anim.translucent_enter); 
                view.startAnimation(hyperspaceJump); 

不知道楼主加上这些代码有什么用,我没加这些代码,实现了在一个tab里切换多个Activity

是为了实现动画效果,但是好像加上了也没有效果
1 楼 路归途 2013-10-16  
  Animation hyperspaceJump = AnimationUtils.loadAnimation(FirstActivity.this,   
                        R.anim.translucent_exit); 
                FirstActivity.this.getWindow().getDecorView().startAnimation(hyperspaceJump); 
                hyperspaceJump = AnimationUtils.loadAnimation(FirstActivity.this,   
                        R.anim.translucent_enter); 
                view.startAnimation(hyperspaceJump); 

不知道楼主加上这些代码有什么用,我没加这些代码,实现了在一个tab里切换多个Activity

相关推荐

    安卓Android源码——TabHost内嵌ActivityGroup界面管理源码.zip

    本资源“安卓Android源码——TabHost内嵌ActivityGroup界面管理源码.zip”提供了一个实例,帮助开发者理解如何在TabHost中嵌入ActivityGroup来实现复杂的界面管理。 TabHost是Android SDK提供的一种用于创建多标签...

    android ActivityGroup的demo

    本示例"android ActivityGroup的demo"将深入探讨如何使用ActivityGroup来构建这样的应用架构。 首先,ActivityGroup是Android早期版本(API Level 10及以下)提供的一种解决方案,用于实现在一个Activity中展示多个...

    Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip

    本资源“Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip”提供了一种实现复杂界面布局的方式,下面将详细解释这两个组件以及它们在源码中的应用。 首先,TabHost是Android提供的一个用于创建带有...

    安卓Android源码——ActivityGroup + GridView + ViewFlipper 实现选项卡.rar

    这份"安卓Android源码——ActivityGroup + GridView + ViewFlipper 实现选项卡.rar"的压缩包文件,显然是提供了一个示例,用于演示如何结合这些组件来创建选项卡式的用户界面。 首先,我们来详细了解这三个核心概念...

    Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.7z

    总结来说,虽然现代Android开发倾向于使用Fragment替代ActivityGroup,但理解TabHost和ActivityGroup的历史以及它们的工作方式对于深入学习Android系统和历史演进非常重要。通过对"Android TabHost内嵌ActivityGroup...

    Android帮助文档及一些资料打包放送

    Android使用ActivityGroup设置androidwindowSoftInputMode失效的问题 - 农民伯伯 - 博客园.mht349.66 KB [Android1_5]ActivityManager [1] Killed am start -n - 农民伯伯 - 博客园.mht346.22 KB [Android1_5]...

    android activitygroup底部菜单

    标题“android activitygroup底部菜单”指的是在Android应用中,使用ActivityGroup来实现底部菜单的功能。底部菜单通常由几个图标按钮组成,点击不同的按钮可以切换到相应的功能页面,而不会每次都完全退出当前...

    Android开发—使用ActivityGroup来切换Activity和Layout.pdf

    在Android开发中,ActivityGroup是一种特殊类型的Activity,它允许开发者在一个Activity内嵌套其他Activity,实现类似TabHost或Fragment的效果,但这是在Android早期版本(API级别较低)中的一种实现方式。...

    Android开发—使用ActivityGroup来切换Activity和Layout

    Android 开发—使用 ActivityGroup 来切换 Activity 和 Layout Android 开发中,经常需要在不同的 Activity 之间进行切换,并且显示不同的ContentView。为了实现这个功能,我们可以使用 ActivityGroup 来管理不同...

    android activitygroup demo

    在Android开发中,ActivityGroup是一个老概念,它属于早期Android版本(2.2及更低)中的TabHost实现的一部分,用于在一个Tab内管理多个Activity。尽管在Android 3.0(API级别11)之后,ActivityGroup被废弃,...

    Android TabHost内嵌ActivityGroup界面管理源码.rar

    在实际应用中,由于Android系统的不断更新,现在的开发通常推荐使用Fragment和FragmentTabHost来替代ActivityGroup,因为Fragment更易于管理,且支持API 11以上的所有版本。然而,对于旧项目的维护或对早期Android...

    AndroidTabHost内嵌ActivityGroup界面管理源码.zip

    此外,随着版本更新,Android推荐使用Fragment替代ActivityGroup,因为Fragment提供了更灵活的布局管理和更好的生命周期管理。 总之,AndroidTabHost内嵌ActivityGroup的界面管理是一种较旧的实践,适用于处理早期...

    Android TabHost内嵌ActivityGroup界面管理源码.zip

    学习和理解TabHost与ActivityGroup的结合使用,有助于开发者构建具有多级导航的复杂Android应用。然而,随着Android版本的更新,这种做法已经逐渐被 Fragments 和 ViewPager 替代,因为它们提供了更好的回退栈管理和...

    Android程序研发源码Android TabHost内嵌ActivityGroup界面管理源码.rar

    在Android应用开发中,TabHost和ActivityGroup是两个重要的组件,它们被用来实现多标签页的界面管理和在各个标签页间切换活动。本压缩包提供的源码是关于如何在Android项目中利用TabHost内嵌ActivityGroup来管理多个...

    Android中ActivityGroup的应用

    ActivityGroup的用法,头部和...至于在Android在ActivityGroup里执行跳转详细介绍 请到我百度空间查看。运行效果也在下面地址可以看到。 http://hi.baidu.com/qinxiaowei137/blog/item/32a3761703ba6febc3ce798b.html

    android activitygroup

    android activitygroup 的使用方法代码sample,可提供大家借鉴

    Android应用源码ActivityGroup + GridView + ViewFlipper 实现选项卡.zip

    不过,从Android 3.0(API 11)开始,官方推荐使用Fragment替代ActivityGroup,因为Fragment提供了更好的回退栈管理和资源回收。尽管如此,了解ActivityGroup的历史和工作方式仍然对理解Fragment有所帮助。 1. **...

Global site tag (gtag.js) - Google Analytics