Android 返回父活动时如何设置所选片段?

Android 返回父活动时如何设置所选片段?,android,android-fragments,Android,Android Fragments,我有两个活动:家庭活动和药物细节活动。药物细节活动是家庭活动的一种形式 AndroidManifest <activity android:name=".MedicineDetailActivity" android:label="Medicine Detail" android:parentActivityName=".HomeActivity" /> <activity android:name=".HomeActivity" android

我有两个活动:家庭活动和药物细节活动。药物细节活动是家庭活动的一种形式

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" />
家庭活动

@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中获取该数据时,它将打开药物列表片段,而不是默认的Home片段。不幸的是,我要获取数据的此行将返回错误:

fragmentName = intent.getExtras().getString("fragment");
或者,我尝试使用onActivityResult,据说它是在活动打开时执行的(在本例中,当Medicine Detail活动关闭后Home活动重新打开时)。但它从未被执行过:

@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()
    或任何其他片段事务的情况下离开某个活动,该活动将管理此状态并保持原样


    如果状态未保持,则说明您做得不够,但您不应该做的太多。

    通过设置结果并在onBackPressed中完成活动,您试图实现什么?同时向我们展示您如何导航到其他活动的代码。@Isak我会编辑它,希望它更清晰