在我的應用程序,正在使用的導航抽屜(在片段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方法來處理意圖 –