![](/img/trans.png)
[英]popBackStack() not working when going back from Activity 2 Fragment to Activity 1 Fragment
[英]how to set selected fragment when going back to the parent activity?
我有 2 项活动:家庭活动和药物细节活动。 医学细节活动是家庭活动的孩子
AndroidManifest
<activity android:name=".MedicineDetailActivity"
android:label="Medicine Detail"
android:parentActivityName=".HomeActivity" />
<activity
android:name=".HomeActivity"
android:label="HOME PAGE"
android:theme="@style/AppTheme.NoActionBar" />
Home Activity 有一个抽屉,其中一个菜单称为药物列表,它打开药物列表片段。 内部药物列表片段是一个列表视图,显示药物列表。 如果点击了医学,它将打开医学详细信息活动。
所以基本上,我想要的顺序是这样的:
当我单击箭头按钮时,我一直卡在第 4 步,它返回到 Home Activity 并打开 home 片段,因为它是默认设置。 我尝试了这些但仍然无法正常工作:
医学详情活动
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
}
return false;
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent data = new Intent();
data.putExtra("fragment", "med_list_fragment");
setResult(RESULT_OK, data);
finish();
}
家活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Intent intent = getIntent();
fragmentName = intent.getExtras().getString("fragment");
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
if (savedInstanceState == null{
if (fragmentName != null) {
//open fragment by fragmentName
}
else {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
navigationView.setCheckedItem(R.id.nav_home);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("Is it in?", "In here");
}
单击后退箭头按钮时,我打算传递名为 fragment_name 的数据,因此当我在 Home Activity 中获取它时,它将打开药物列表片段而不是默认的主片段。 不幸的是,我要获取数据的这一行将返回错误:
fragmentName = intent.getExtras().getString("fragment");
或者,我尝试使用据说在打开活动时执行的 onActivityResult(在这种情况下,当关闭 Medicine Detail Activity 后重新打开 Home Activity 时)。 但它根本没有被执行:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("Is it in?", "In here");
}
子活动关闭后,如何让父活动默认打开某个片段? 请帮忙。
这两个活动是不同的。 您可以通过使用startActivityForResult()
接收onActivityResult()
回调来实现这一点。 但是你应该修改你的第 3 点和第 4 点:
基本上将您的应用程序设置为不干扰任务和后台堆栈。 如果您在未调用finish()
或任何其他片段事务的情况下离开活动,则活动将管理此 state 并保持原样。
如果 state 没有保留,那说明你做得不够,而是你不应该做的太多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.