【发布时间】:2019-09-20 08:27:10
【问题描述】:
我有 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 有一个抽屉,其中一个菜单称为药物列表,它打开药物列表片段。内部药物列表片段是一个列表视图,显示药物列表。如果点击了医学,它将打开医学详细活动。
所以基本上,我想要的顺序是这样的:
- 在首页活动中,点击菜单打开抽屉
- 在抽屉中,点击“药品列表”菜单,将打开包含药品列表的药品列表片段。
- 点击其中一种药物,会打开Medicine Detail Activity,显示所选药物的信息
- 单击后退箭头按钮,它(应该)返回首页活动并打开并选择药物列表片段。
当我单击箭头按钮时,我一直卡在第 4 步,它返回到 Home Activity 并打开 home 片段,因为它是默认设置。我尝试了这些但仍然无法正常工作:
MedicineDetailActivity
@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();
}
HomeActivity
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 据说是在活动打开时执行(在这种情况下,当医学详细信息活动关闭后重新打开主页活动时)。但它根本没有被执行:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("Is it in?", "In here");
}
在子活动关闭后,如何让父活动默认打开某个片段?请帮忙。
【问题讨论】:
-
你想通过设置结果并完成onBackPressed中的活动来实现什么?还向我们展示您如何导航到其他活动的代码。
-
@Isak 我编辑了它,希望它更清晰