ActivityGroup(解决Tabhost中界面用intent二次跳转后界面是新界面而不显示导航的问题)



实现在tabactivity中,控件的2次跳转后界面仍然显示tab导航

使用ActivityGroup

实例:

导航界面:HomeActivity.java

package com.xiyuan.activitygroup;


import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.TabHost;


public class HomeActivity extends TabActivity implements OnClickListener {
	public static String FIRST = "1";
	public static String SECOND = "2";
	public static String THIRD = "3";

	private Intent intent1, intent2, intent3;
	private static TabHost tabHost;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_home);
		initIntent();
		initView();
		initTabHost();

	}
	private void initIntent() {
		intent1 = new Intent(this, FirstActivity.class);
		intent2 = new Intent(this,  MyAtivityGroup.class);
		intent3 = new Intent(this,ThirdActivity.class);

	}

	private void initView() {
		findViewById(R.id.ll_new).setOnClickListener(this);
		findViewById(R.id.ll_choice).setOnClickListener(this);
		findViewById(R.id.ll_classify).setOnClickListener(this);
	}

	private TabHost.TabSpec createTabSpec(String tag, String name, int resIcon, final Intent content) {
		return tabHost.newTabSpec(tag).setIndicator(name, getResources().getDrawable(resIcon))
				.setContent(content);
	}

	private void initTabHost() {
		tabHost = getTabHost();
		tabHost.addTab(createTabSpec(FIRST, "1",R.drawable.first, intent1));
		tabHost.addTab(createTabSpec(SECOND, "2",R.drawable.second, intent2));
		tabHost.addTab(createTabSpec(THIRD, "3", R.drawable.fourth,intent3));

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.ll_new:
			tabHost.setCurrentTabByTag(FIRST);
			break;
		case R.id.ll_choice:

			tabHost.setCurrentTabByTag(SECOND);
			break;
		case R.id.ll_classify:

			tabHost.setCurrentTabByTag(THIRD);
			break;
		default:
			break;
		}
	}
}


布局界面:activity_home

<?xml version="1.0" encoding="utf-8"?>
<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" 
    android:background="#ffffff">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:background="@null" >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@null" >
        </FrameLayout>

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

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:baselineAligned="false"
            android:paddingTop="5dip"
            android:orientation="horizontal" >

            <LinearLayout
                android:id="@+id/ll_new"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:clickable="true">
                <ImageView
                    android:id="@+id/iv_new"
                    android:layout_width="30dp"
                    android:layout_height="45dp"
                    android:src="@drawable/first" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/ll_choice"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:clickable="true">

                <ImageView
                    android:id="@+id/iv_choice"
                    android:layout_width="30dp"
                    android:layout_height="45dp"
                    android:src="@drawable/second" />
            
            </LinearLayout>

            <LinearLayout
                android:id="@+id/ll_classify"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:clickable="true">

                <ImageView
                    android:id="@+id/iv_classify"
                    android:layout_width="30dp"
                    android:layout_height="45dp"
                    android:src="@drawable/fourth" />

            </LinearLayout>

        </LinearLayout>
    </LinearLayout>

</TabHost>

 
3个子界面:第一个和第三个都是普通界面,就不放代码了。
第二个界面的代码MyAtivityGroup
package com.xiyuan.activitygroup;

import java.util.ArrayList;

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

@SuppressWarnings("deprecation")
public class MyAtivityGroup extends ActivityGroup {

	public static MyAtivityGroup cateGroup;
	private ArrayList<View> historyView;// 用来存储ActivityGroup中填充的view

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		this.historyView = new ArrayList<View>();
		cateGroup = this;

		View view = getLocalActivityManager().startActivity(
				"FirstActivity",
				new Intent(this, SecondActivity.class)
						.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
				.getDecorView();

		replaceView(view);
	}

	/**
	 * activitygroup中返回上一层界面
	 */
	public void back() {
		if (historyView.size() > 1) {
			historyView.remove(historyView.size() - 1);
			setContentView(historyView.get(historyView.size() - 1));
		} else {
			finish();
		}
	}

	/**
	 * 替换当前view
	 * 
	 * @param v
	 */
	public void replaceView(View v) {
		// 将View加入历史View记录
		historyView.add(v);
		setContentView(v);
	}

	/**
	 * 系统返回按键监听事件
	 */
	@Override
	public void onBackPressed() {
		// TODO Auto-generated method stub
		MyAtivityGroup.cateGroup.back();
		return;
	}

}
点击跳转后的下一个界面:SecondActivity
package com.xiyuan.activitygroup;

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

public class SecondActivity extends Activity{

	Button btn;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second_activity);
		btn=(Button) findViewById(R.id.button1);
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(SecondActivity.this, Second1Activity.class)
				.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				View view = MyAtivityGroup.cateGroup.getLocalActivityManager()
				            .startActivity("secondActivity", intent
						        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
						        .getDecorView();
				MyAtivityGroup.cateGroup.replaceView(view);				
			}
		});
	}
}
效果图:
初始界面:
点击导航界面的第二个图片后的第二个界面:
点击进入下一个界面后的界面。注意下面的导航界面没有被覆盖,这就是由于ActivityGroup管理的效果
点击返回后会回到上一个界面:即第二个图片。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值