【发布时间】:2011-12-20 07:07:12
【问题描述】:
我有一个活动A,它开始活动B,活动B开始活动C。有没有办法不显示活动B。 我想要这种行为,因为如果活动 B 没有内容(例如 ListView),则显示活动 C,我在该活动 C 上选择了一些数据,然后按返回按钮返回活动 B。 关键是我希望在活动堆栈上有活动 B,但在某些情况下不显示它。
【问题讨论】:
我有一个活动A,它开始活动B,活动B开始活动C。有没有办法不显示活动B。 我想要这种行为,因为如果活动 B 没有内容(例如 ListView),则显示活动 C,我在该活动 C 上选择了一些数据,然后按返回按钮返回活动 B。 关键是我希望在活动堆栈上有活动 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
}
}
//从activity C返回时,检查activity B是否已经初始化
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ACTIVITY_NOT_INITIALIZED) {
//show activity B
setContentView(R.layout.activity_B);
}
}
【讨论】:
在您的清单集中
android:theme="@android:style/Theme.NoDisplay"
为您的活动。
【讨论】:
Activity 而不是AppCompactActivity
extends Activity 我得到这个:java.lang.RuntimeException: Unable to resume activity {myActivity}: java.lang.IllegalStateException: Activity {myActivity} did not call finish() before onResume() 完成
AppCompatActivity(至少来自androidx)。在它启动新的之前,所有其他答案仍然显示 Activity 的短暂闪烁。
不要为活动 B 设置 setContentView()
【讨论】:
只需在activity B的onCreate()方法中调用startActivity()即可。不会显示,但会在activity stack中。
【讨论】:
您可以调用 startActivity,而无需为布局调用 setContentView。希望这会有所帮助!
【讨论】: