2012-07-13 134 views
0

我实现我的应用程序选项卡。为此,我创建了一个类来处理选项卡中的活动。我的问题是我像A,B,C,D一样接连开始了一些活动。现在我想从D回归活动A,并且其他活动如B,C和D应该被销毁。请帮我实施这个。这里是我用来处理活动的代码...如何从孩子的活动转向家庭活动tabhost

public class TabGroupActivity extends ActivityGroup { 

protected Context mCTX; 
protected ArrayList<String> mIdList; 

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

    if(mIdList == null){ 
     mIdList = new ArrayList<String>(); 
    } 

    //set context 
    mCTX = this; 

} 

public void startChildActivity(String Id, Intent intent){ 
    Id+= System.currentTimeMillis(); 
    Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 

    if (window != null) { 
     mIdList.add(Id); 
     setContentView(window.getDecorView()); 
    } 
} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 

    int length = mIdList.size(); 
    if(length > 0){ 
     Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1)); 
     current.finish(); 
    } 

} 

@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()); 
} 


} 

当我开始活动时,我将使用下面的代码。

Intent locIntent = new Intent(HomeActivity.this,SomeActivity.class); 
TabGroupActivity parent = (TabGroupActivity) getParent(); 
parent.startChildActivity("some id", locIntent); 

我还有一个疑问...如何将一个选项卡中的活动切换到另一个选项卡中的活动。 在此先感谢

+0

仍在寻求解决方案 – Aju 2012-08-28 13:58:44

+0

做你得到了解决? – 2014-09-30 07:55:57

回答

5

不要使用活动一个TabHost,它是一种浪费内存里面。我宁愿使用片段。您可以轻松地将它们添加到TabHost。这是一个很好的教程:

http://thepseudocoder.wordpress.com/2011/10/13/android-tabs-viewpager-swipe-able-tabs-ftw/

+0

谢谢....我认为这是非常有用的....我会尝试用这个... – Aju 2012-07-13 09:27:24

+0

我想你特林让喜欢的TabBar导航在iOS到你的Android应用程序。这不是一个好主意。尝试以Android方式重新考虑你的用户界面。如果你看看大多数android应用程序,那么当你有一个TabHost时,它只能在单一级别(根目录)上工作,当你更深入时,应用程序通常会启动一个没有TabHost的新活动。 – 2012-08-29 18:50:00

+0

我正在尝试制作一个Ios Like tabbar。客户只要这样就可以了。通过使用ActivityManager,一切正常。我希望它能从孩子的活动中回到家庭活动中,并且消除这两项活动之间的所有其他活动。 – Aju 2012-09-03 12:53:51

1

你为什么不设置标志FLAG_ACTIVITY_CLEAR_TOP新的意图,你在呼唤回去这是起步较早的活动。

你需要设置在该活动清单文件的launchMode到多个实例,并且只使用FLAG_ACTIVITY_CLEAR_TOP。

如前所述FLAG_ACTIVITY_CLEAR_TOP理论。

例如,考虑由以下活动组成的任务:A,B,C,D。如果D调用startActivity()并解析为活动B的组件,则C和D将完成,B收到给定的意图,导致堆栈现在是:A,B。

我已经使用它,它工作得很好,所以请让我知道,如果它对您有意义或者如果您在实现它时遇到任何问题。

+0

我试过了,但没用......通常这种方式对我有用。这里我使用Tab和Activitygroup来处理所有的活动。在这里它不工作.. – Aju 2012-09-05 14:13:02

+0

然后,你的ActivityGroup类必须有一些错误,因为它写在官方的Android网站上,它为我工作..你可以在这里粘贴你的活动组代码。 – Shachillies 2012-09-06 07:28:12

+0

我在问题中给出的代码... – Aju 2012-09-06 12:14:18