2017-03-18 45 views
0

首先,我創建導航抽屜活動的應用程序並從片段移動到新活動,現在我想在導航到抽屜主要活動的新活動上設置主頁按鈕。我試圖用這個代碼:如何從活動移回導航抽屜

btnHome.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(add_activity.this,MainFragment.class); 
       startActivity(intent); 
       finish(); 

      } 
     }); 

但顯示爲不幸的是你的應用程序已經停止

+0

包括您logcat的!沒有足夠的信息給任何人回答你的問題 – Booger

+0

自然任務堆疊排序應該帶你回來嗎?使用您想要發生的事情的圖表或質地流程。 –

+0

好吧,只要忘記錯誤。請你能告訴我需要什麼類型的代碼才能將我從活動帶到導航抽屜中,並且上面的代碼是否正確? –

回答

0

我們爲了幫助您需要更多的細節錯誤。 我已經注意到的第一件事是這條線

Intent intent = new Intent(add_activity.this,MainFragment.class); 
       startActivity(intent); 
       finish(); 

問題的,這是你不能故意啓動片段。

如果你想從MainActivity開始TravelActivity做這樣的:

Intent intent = new Intent (this /*indicating your current activity*/, TravelActivity.class /*indicating Activity you want to start*/) 
startActivity(intent); //start TravelActivity 
finish() //finish current activity - if you press back you will exit the app (if MainActivity was launcher activity) 

如果你有在旅遊活動開始之後應加載片段是一個簡單的輔助方法,會做你的片段交易

public void replaceFragment(int rootViewId, Fragment fragment, boolean addToBackStack) { 
    try { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 

     if (fragment == null) 
      return; 
     if (checkIfFragmentIsCurrent(fragment, rootViewId)) 
      return; 

     String backStateName = fragment.getClass().getSimpleName(); 
     boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0); 

     if (!fragmentPopped) { 

      FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
      transaction.replace(rootViewId, fragment); 

      if (addToBackStack) { 
       transaction.addToBackStack(fragment.getClass().getSimpleName()); 
      } 
      transaction.commit(); 
     } 
    } catch (Exception e) { 
     Log.e("ReplaceFragment", "Exception: " + e.getMessage()); 
    } 
} 

protected boolean checkIfFragmentIsCurrent(Fragment fragment, int placeHolderRes) { 
    Fragment currentFragment = getSupportFragmentManager().findFragmentById(placeHolderRes); 
    if (fragment != null && currentFragment != null) { 
     if (fragment.getClass().equals(currentFragment.getClass())) { 
      return true; 
     } 
    } 
    return false; 
} 

爲了使用這個只是調用replacFragment(將容納你的片段的容器的ID,片段例如,真實的 - 如果你想片段添加到堆棧中)

要了解片段交易reffer這個link