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




    

        
        

        

        

            
                
            

            

                
            
            

            

                

            

        
    



 
  
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 historyView;// 用来存储ActivityGroup中填充的view

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		this.historyView = new ArrayList();
		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(解决Tabhost中界面用intent二次跳转后界面是新界面而不显示导航的问题)_第1张图片
点击导航界面的第二个图片后的第二个界面:
ActivityGroup(解决Tabhost中界面用intent二次跳转后界面是新界面而不显示导航的问题)_第2张图片
点击进入下一个界面后的界面。注意下面的导航界面没有被覆盖,这就是由于ActivityGroup管理的效果
ActivityGroup(解决Tabhost中界面用intent二次跳转后界面是新界面而不显示导航的问题)_第3张图片
点击返回后会回到上一个界面:即第二个图片。




你可能感兴趣的:(android,控件整理)