java - 从 Activity B 返回到 Activity A 的 fragment

标签 java android android-fragments navigation-drawer

在我的应用程序中,我使用抽屉导航(在 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/

相关文章:

Java 停止 MIDI 播放

java - 我怎样才能让我的线程进入休眠状态

android - 如何从一个 fragment 切换到另一个 fragment android

android - 如何在选项卡式 Activity 中的 SupportMapFragment 上设置标记?

android - YouTube 安卓 API : YouTubePlayerFragment loading spinner

Java - 如何使用类文件?

java - 控制java中的循环执行速度 - Android

java - 无法使用 JavaMail api 发送邮件

安卓开发: [HOW TO] intercept daily alarm and dismiss programmatically

android - android 中 shapes.xml 中的多个形状