2011-09-21 54 views
0

我有TabHost一个问题...如何保持Tabhost时候开始其他活动

我TabBarActivity类流程为:

公共类TabBarActivity扩展TabActivity实现OnTabChangeListener {

/* 
* (non-Javadoc) 
* 
* @see android.app.ActivityGroup#onCreate(android.os.Bundle) 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

    setContentView(R.layout.layout_tab); 

    TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); 

    TabSpec mTab1 = tabHost.newTabSpec("tab1"); 
    TabSpec mTab2 = tabHost.newTabSpec("tab2"); 

    mTab1.setIndicator("TAB1").setContent(
      new Intent(this, TAB1.class)); 
    mTab2.setIndicator("TAB2").setContent(
      new Intent(this, TAB2.class)); 

    /** Add tabSpec to the TabHost to display. */ 
    tabHost.addTab(mTab1); 
    tabHost.addTab(mTab2); 


} 

我有TAB1.java内的ListView(如联系人名称)类

假设: 我有一个屏幕布局2底部的标签(TAB1,TAB2)。当我点击TAB1时,我有一个联系人名单,如果我点击itemList。 ItemList的详细屏幕将打开。在“DetailScreen”布局中,我想将(TAB1,TAB2)tabhost保留在底部屏幕上。

现在,当我运行一个应用程序并点击itemList。我不守tabhost(TAB1,TAB2)中的每个项目列表的DetailScreen ...

如何保持它,当我启动项列表(如:DetailScreen.java)的活动

谢谢您


@所有: 感谢您的反馈,但它似乎是你不明白我的问题。

我的问题: 详细信息我的项目: 1 - 我有一些类: + TabBarActivity.java(源代码如上述流程,页面顶部,这对底部的布局2标签TAB1,TAB2 ....默认当运行应用程序时forcus Tab1 + Tab1.java(重要:在这个类中,我有列表视图(例如手机上的youtube),当我单击列表中的一个项目时 - >打开每个列表项目的详细信息屏幕。 ..确定) + Tab2.java(做些什么...)

2 - 当我运行的应用程序,你看2底部的标签布局和默认s tartActivity Tab1.java - >然后在这个屏幕上显示列表视图... 而当点击列表中的一项 - >打开该项目的详细画面(StartActivity DetailItem.java) - >但是底部的2个标签将消失。 ...

我不知道为什么?

请帮助我:((

+0

你需要使用碎片或的ActivityGroup。但ActivityGroup已弃用 –

+0

只看到在您的问题的左下角的相关标签下的链接 –

回答

0

你可以做到这一点使用这个自定义类:

import java.util.ArrayList; 

import android.app.Activity; 
import android.app.ActivityGroup; 
import android.app.LocalActivityManager; 

import android.content.Intent; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Window; 

/* 
* The purpose of this Activity is to manage the activities in a tab. 
* Note: Child Activities can handle Key Presses before they are seen here. 
* @author Eric Harlow 
*/ 
public class TabGroupActivity extends ActivityGroup { 

    private ArrayList<String> mIdList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     if (mIdList == null) mIdList = new ArrayList<String>(); 
    } 

    /* 
    * This is called when a child activity of this one calls its finish method. 
    * This implementation calls {@link LocalActivityManager#destroyActivity} on the child activity 
    * and starts the previous activity. 
    * If the last child activity just called finish(),this activity (the parent), 
    * calls finish to finish the entire group. 
    */ 
    @Override 
    public void finishFromChild(Activity child) { 
     LocalActivityManager manager = getLocalActivityManager(); 
     int index = mIdList.size()-1; 

     if (index < 1) { 
       finish(); 
       return; 
      } 

      manager.destroyActivity(mIdList.get(index), true); 
      mIdList.remove(index); 
      index--; 
      String lastId = mIdList.get(index); 
      Intent lastIntent = manager.getActivity(lastId).getIntent(); 
      Window newWindow = manager.startActivity(lastId, lastIntent); 
      setContentView(newWindow.getDecorView()); 
    } 

    /* 
    * Starts an Activity as a child Activity to this. 
    * @param Id Unique identifier of the activity to be started. 
    * @param intent The Intent describing the activity to be started. 
    * @throws android.content.ActivityNotFoundException. 
    */ 
    public void startChildActivity(String Id, Intent intent) {  
     Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
     if (window != null) { 
      mIdList.add(Id); 
      setContentView(window.getDecorView()); 
     }  
    } 

    /* 
    * The primary purpose is to prevent systems before android.os.Build.VERSION_CODES.ECLAIR 
    * from calling their default KeyEvent.KEYCODE_BACK during onKeyDown. 
    */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    /* 
    * Overrides the default implementation for KeyEvent.KEYCODE_BACK 
    * so that all systems call onBackPressed(). 
    */ 
    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      onBackPressed(); 
      return true; 
     } 
     return super.onKeyUp(keyCode, event); 
    } 

    /* 
    * If a Child Activity handles KeyEvent.KEYCODE_BACK. 
    * Simply override and add this method. 
    */ 
    @Override 
    public void onBackPressed () { 
     int length = mIdList.size(); 
     if (length >=1) { 
      Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1)); 
      current.finish(); 
     } 
    } 
} 

而且使用这样的:

在主类中持有的标签:

public class MainActivity extends TabGroupActivity { 

} 

并在您的onItemClickListener中,您可以像这样开始活动:

startChildActivity("CollectionList", new Intent(this,CollectionMenu.class)); 

,当你在CollectionMenu(延伸TabGroupActivity),你就可以开始你的孩子的活动,如下面的代码:

Intent previewMessage = new Intent(getParent(), DetailScreen.class); 
TabGroupActivity parentActivity = (TabGroupActivity)getParent(); 
parentActivity.startChildActivity("DetailScreen", previewMessage); 

这应该工作。如果你有任何问题,只是问!

+0

使用您提供的类,我不能从一个子活动到另一个,并且也在主选项卡上,后退按钮不会关闭应用。 – Shalin

+0

检查编辑的答案。 –

+0

我面临同样的问题,所以我应用你的方法,但是当我们通过TabGroupActivity扩展MainActivity时,我们将无法获得标签主机。现在我们会做什么? – Rohit

0

你必须使用TabGroupActivity类,

进一步u必须实现 Tab1Activity类和Tab2Activity类 这是从TabGroupActivity

延伸,你会打电话给startChildActivity(TAB1.class)和startChildActivity( TAB2.class)分别, 通过这个,你将有你的选项卡选项无论你在TAB1或TAB2。

你可以有TabGroupActivity类实现样品在线式好,

最近我有呈三角项目那Y M,说明这样的。

0

如何使用:

在一些标签,如4个标签在一个标签,每个标签扩展了TabActivity,巫ü使用方法startChildActivity启动真正的活动。

代码

public class Tab_BookCityActivity extends TabGroupActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    startChildActivity("BookCityActivity", new Intent(this, BookCityActivity.class)); 

    } 
} 
相关问题