在我的应用程序,正在使用的导航抽屉(在片段A)导航到片段:返回到活动A的片段
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中,我显示一个预订列表和一个FloatingActionButton以启动活动B,如果没有预订,用户可以添加预订。当用户完成添加预约时,我想将其显示在预订片段中。这需要我“回到”片段。我怎么做到这一点,因为活动B对活动A一无所知?
我已经试过:
我试图建立这样的活动A的方法:
public void navigateToFragment(int viewId) {
displayView(R.id.nav_reservation);
}
,然后调用此方法从活动B:
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new MainActivity().navigateToFragment(R.id.nav_reservation);
//MainActivity is Activity A
}
});
由于nullPointerException
在displayView()
中的应用程序崩溃从t他行:
String title = getString(R.string.app_name);
,因为我创造一无所知活动的以前的状态了新的MainActivity对象,右键这不奇怪?
这question镜像我的问题,但是基于Settings
所以我不能真正使用我的情况下的答案。 我该如何完成这项任务?
对于第二种选择,您可以通过覆盖newIntent方法来处理意图 –