2014-09-02 73 views
0

我有三个活动:A,B,C 将两个活动A,BI可以拨打Android的导航和活动(确定哪些活动是父母)

startActivity(new Intent(this, C.class)); 

所以逻辑会是这样A-> B-> C或A-> C ..现在当我在C时,我想回到B或A,这取决于C从哪个活动开始。

现在的问题是,当我在活动C中,如何获得“返回”父活动,从中打开此活动C?

我一直在尝试一些与NavUtilsIntent.FLAGS,但我没有成功。

顺便说一句:我不能使用finish()onBackPressed()。我在我的应用程序中使用自定义动态创建的主题,当我使用onBackPressed()时,它会在加载所需活动之前显示默认应用程序主题(带图标的默认白色屏幕)。

感谢您的任何帮助。

+0

你想以编程方式回到父母,还是想在用户按下“后退按钮”时取回? – mmlooloo 2014-09-02 19:26:19

+0

当用户按下'后退按钮'或'ActionBar'上的'向上按钮'时,我想回到父窗口。所以基本上都是这样,但是如果它在编程上对我来说很好。我总是可以覆盖'onBackPressed()'。 – 2014-09-02 20:16:39

回答

1

在您的清单中将此添加到活动C,因此这部分解决了后退按钮。

<activity 
      android:name="your.package.name.C" 
      android:launchMode="singleInstance" > 
</activity> 

让解决了按键:

必须使用putExtra表示的C activity父。例如,当你想从活动B调用它做到这一点:在一个名为parent

Intent i = new Intent(B.this,C.class);   
       i.putExtra(MY_PARENT,"B"); 
       startActivity(i); 

activity CMY_PARENT值。然后当用户按UP button读取并转到父项。 这意味着在活动C:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     Intent i = new Intent(C.this,Class.forName(parent));     
     startActivity(i); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

是否工作? – mmlooloo 2014-09-04 01:56:33

+0

是的,它非常有用,非常感谢!但问题是它只能解决选择父活动的问题。我已经能够通过NavUtils获得。 我的问题可能是其他地方。我有两个主题(黑色和白色),其中白色主题是默认主题。当我切换到黑暗的主题和“完成()”任何活动时,一段时间后,在加载黑暗的主题之前,会出现一个空白默认布局的白色屏幕。 – 2014-09-09 13:27:37

+0

顺便说一句,当我在活动清单中使用'android:launchMode =“singleInstance”'行。当我切换到C活动时,这个默认的白色屏幕也会出现。它与该启动模式有关,因为当我删除它时,黑色主题依然存在,并且在活动开始之前没有白色的默认屏幕。 – 2014-09-09 13:29:45

0

您可以创建并在ActivityonCreate方法处理的对象太多,所以导致你所期望的活性得到加载之前看到的延迟......

您可以在AsyncTask中完成所有这些创建和处理,并保持您的onCreate方法的清洁,然后再也看不到延迟。

+0

不是真的,我正在做的第一件事是改变主题(甚至在调用'super之前。在OnCreate()')。只有我在活动中做的事情是访问操作栏并更改它的标题。我实际上不知道为什么会有这种延迟。最有可能的原因是改变应用程序主题。在我看来,它总是显示活动加载前的默认主题。 – 2014-09-09 13:17:45