在我的应用程序中,我使用抽屉导航(在 fragment A 中)导航到 fragment :
public void displayView(int viewId){
Fragment fragment = null;
String title = getString(R.string.app_name);
switch (viewId) {
case R.id.nav_menu:
fragment = new MenuFragment();
title = getString(R.string.menu_title);
viewIsAtHome = false;
break;
case R.id.nav_reservation:
fragment = new ReservationFragment();
title = getString(R.string.reservation_title);
viewIsAtHome = false;
break;
...
if (fragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.commit();
}
// set the toolbar title
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle(title);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
}
displayView()
在 onNavigationItemSelected
中调用:
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
displayView(item.getItemId());
return true;
}
现在,在 ReservationFragment 中,我显示预订列表和用于启动 Activity B 的 FloatingActionButton,如果没有预订,用户可以在其中添加预订。当用户添加完预订后,我想将其显示在预订 fragment 中。这需要我“返回”到 Fragment。由于 Activity B 对 Activity A 一无所知,我该如何完成此操作?
What I've tried:
我尝试在 Activity A 中创建一个方法,如下所示:
public void navigateToFragment(int viewId) {
displayView(R.id.nav_reservation);
}
然后从 Activity B 调用此方法:
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new MainActivity().navigateToFragment(R.id.nav_reservation);
//MainActivity is Activity A
}
});
应用程序因 displayView()
中的 nullPointerException
而崩溃:
String title = getString(R.string.app_name);
这并不奇怪,因为我创建了一个新的 MainActivity 对象,它对 Activity 的先前状态一无所知,对吧?
这个question反射(reflect)了我的问题,但基于 Settings
所以我不能真正在我的案例中使用答案。
我该如何完成这个任务?
最佳答案
我想到了三种快速方法。首先,您可以使用 startActivityForResult 启动 ActivityB,并在用户在 ActivityB 中执行所需操作后在 ActivityA 中处理结果。其次,您可以将activityA设置为singleTop,在完成activityB之前,您可以使用clearTop启动ActivityA,并使用一个名为clear_top(https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP)的 Intent 标志。 最后但并非最不重要的一点是,您可以通过绑定(bind)两个 Activity 中的服务来连接两个 Activity ,并通过您绑定(bind)的服务进行通信。
关于java - 从 Activity B 返回到 Activity A 的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397714/