Android 返回父活动时如何设置所选片段?
我有两个活动:家庭活动和药物细节活动。药物细节活动是家庭活动的一种形式 AndroidManifestAndroid 返回父活动时如何设置所选片段?,android,android-fragments,Android,Android Fragments,我有两个活动:家庭活动和药物细节活动。药物细节活动是家庭活动的一种形式 AndroidManifest <activity android:name=".MedicineDetailActivity" android:label="Medicine Detail" android:parentActivityName=".HomeActivity" /> <activity android:name=".HomeActivity" android
<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我会编辑它,希望它更清晰