实现在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管理的效果
点击返回后会回到上一个界面:即第二个图片。