2011-12-20 84 views
13

我有一个活动A,它开始活动B,活动B开始活动C.是否有办法不显示活动B. 我想要这种行为,因为如果没有内容(例如对于ListView )显示活动B,显示活动C,我在其上选择一些数据,然后按返回按钮返回到活动B. 问题是,我希望在活动堆栈上有活动B,但不能在活动堆栈中显示它案例。开始活动时不显示它

回答

17

我找到了解决办法:

  • 活动A开始活动B有额外的参数(intent.putExtra( “东西”,真))
  • 活动B:
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getIntent().hasExtra("something") && getIntent().getBooleanExtra("something", false) { 
      //show activity B 
     setContentView(R.layout.activity_B); 
    } else { 
      //don't show activity B, start activity C 
     startActivityForResult(activity_C, ACTIVITY_NOT_INITIALIZED); //start activity C 
    } 
} 

//来自活性C返回时,检查活动B w ^如已初始化

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == ACTIVITY_NOT_INITIALIZED) { 
     //show activity B 
     setContentView(R.layout.activity_B); 
    } 
} 
1

只需拨打startActivity()onCreate()活动方法B.它不会显示,但它会在活动堆栈中。

+4

这是真的,但在活动C开始之前您会看到空白页半秒。我不想要这个。 – 2011-12-20 07:22:40

0

您可以调用startActivity,而无需为布局调用setContentView。希望这可以帮助!

+2

然后回到这个活动将有问题:) – Jin35 2011-12-20 07:15:41

2

没有为活动B组的setContentView()

+2

然后回到这个活动将有问题:) – Jin35 2011-12-20 07:15:36

+2

这是真的,但你会看到活动C开始前的半秒空白页。我不想要这个。 返回不是一个问题,因为你可以在onResume()中处理它。 – 2011-12-20 07:23:01

10

在你的清单中设置

android:theme="@android:style/Theme.NoDisplay" 

为您的活动。

+4

你也需要扩展'Activity'而不是'AppCompactActivity' – vladimir 2017-04-12 16:48:12

+0

With'extends Activity'我得到这个:java.lang.RuntimeException:无法恢复活动{myActivity}:java.lang.IllegalStateException:Activity {myActivity} did not在onResume()完成之前调用finish() – 2017-07-13 12:36:52