0

在我的应用程序,正在使用的导航抽屉(在片段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 
     } 
    }); 

由于nullPointerExceptiondisplayView()中的应用程序崩溃从t他行:

String title = getString(R.string.app_name); 

,因为我创造一无所知活动的以前的状态了新的MainActivity对象,右键这不奇怪?

question镜像我的问题,但是基于Settings所以我不能真正使用我的情况下的答案。 我该如何完成这项任务?

回答

1

我想起了三种快速方法。首先,您可以使用startActivityForResult启动activityB,并在用户在activityB中完成他想要的内容后,在activityA中处理结果。其次,您可以将activityA设置为singleTop,在完成activityB之前,您可以使用clearTop启动ActivityA,并使用名为clear_top的意向标志(https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP)。 最后但并非最不重要的是,您可以通过在两个活动中绑定服务来连接两个活动,并通过您绑定的服务进行通信。

+0

对于第二种选择,您可以通过覆盖newIntent方法来处理意图 –