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方法來處理意圖 –