2014-10-31 26 views
0

當我嘗試從一個片段移動到上一個片段(它不崩潰)時,我的應用程序關閉。這裏是LandingActivity.java是我要調用的主要活動片段ChannelGrid.java,它調用片段GridMain.java.When當我按下移動片段的按鈕GridMain應用程序關閉,而不是移動到ChannelGrid.java.I已添加addToBackStack(「標記」)片段,並嘗試使用onKey()。 。我測試了我在不同的設備也應用..當試圖移動到前一個片段時,應用程序在關閉按鈕時關閉

logcat的詳細

10-31 21:46:57.954 24452-24452/D/ActivityThread﹕ ACT-AM_ON_PAUSE_CALLED ActivityRecord{41eb8b98 [email protected] {xyz/xyz..activity.LandingActivity_}} 
10-31 21:46:57.971 24452-24452/ D/ActivityThread﹕ ACT-PAUSE_ACTIVITY_FINISHING handled : 0/[email protected] 
10-31 21:46:58.007 24452-24452/ V/InputMethodManager﹕ focusOut: [email protected] [email protected] winFocus=false 
10-31 21:46:58.297 24452-24452/ I/SurfaceTextureClient﹕ [0x5143bc58] frames:44, duration:1.002000, fps:43.883736 
10-31 21:46:58.350 24452-24452/ D/OpenGLRenderer﹕ Flushing caches (mode 0) 
10-31 21:46:58.432 24452-24452/ D/OpenGLRenderer﹕ Flushing caches (mode 0) 
10-31 21:46:58.753 24452-24452/ D/OpenGLRenderer﹕ Flushing caches (mode 0) 
10-31 21:46:58.754 24452-24452/ D/OpenGLRenderer﹕ Flushing caches (mode 0) 
10-31 21:46:58.755 24452-24452/ D/OpenGLRenderer﹕ Flushing caches (mode 2) 
10-31 21:46:58.879 24452-24452/ D/ActivityThread﹕ ACT-DESTROY_ACTIVITY handled : 1/[email protected] 
+0

您可以發佈您的logcat讓我們來幫助你。 – 2014-10-31 13:05:33

+0

@AshishTamrakar logcat張貼.. – 2014-10-31 13:11:41

+0

Logcat不顯示任何強制關閉或異常的跡象 – 2014-10-31 13:22:10

回答

0

這解決了我的問題。當你按下你的片段中的按鈕時,你的活動的onBackPressed()方法將會如果您已聲明that..So導航抽屜內處理後退鍵片段可以是一個以這種方式被稱爲..

MainActvity

 public static boolean isMainActivityShown ; 
    public static boolean isFragment1Shown=false ; 
    public static boolean isFragment2Shown=false ; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     isMainActivityShown=true //inside onCreate method put isMainActivityShown true 
. 
. 
. 
} 
       Fragment currentFragment = new Fragment1(); 
        isMainActivityShown=false; //when moving to fragment1 
       isFragment1Shown=true; 
       frgManager = getFragmentManager(); 
       frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
             .commit(); 
    @Override 
     public void onBackPressed() { 

      if(isMainActivityShown) 
      { 
       finish(); 
      } 
      else if(isFragment1Shown) 
      { 
       //write the code to handle back button when you are in Fragment1 
      } 
      else if(isFragment2Shown) 
      { //When you are in Fragment 2 pressing back button will move to fragment1 
       Fragment currentFragment = new Fragment1(); 
       isFragment2Shown=false; 
    isFragment1Shown=true; 

       FragmentManager frgManager; 
       frgManager = getFragmentManager(); 
       frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
         .commit(); 
      } 

      } 

片段1

Fragment currentFragment = new Fragment2(); 

      MainActivity.isFragment1Shown=false; 
MainActivity.isFragment2Shown=true; 
          frgManager = getFragmentManager(); 
          frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
            .commit(); 
0

在ChannelGrid.java,在代碼部分,你正在將GridMain添加到FragmentManager,請務必爲GridMain片段設置一個唯一標記(例如, 'GridMain'代替'tag')。這樣,您將能夠與此片段稍後溝通:

frgManager.beginTransaction().replace(R.id.content_frame, currentFragment).addToBackStack("GridMain").commit(); // replaced "tag" with "GridMain" 

後退按鈕按下事件可以在LandingActivity.java被捕獲:

@Override 
public void onBackPressed() { 
    FragmentManager frgManager; 
    frgManager = getFragmentManager(); 

    Fragment fragment = fragmentManager.findFragmentByTag("GridMain"); 
    if (fragment != null) { 
     GridMain gridMain = (GridMain) fragment; 
     if (!gridMain.onBackPressed()) { 
      super.onBackPressed(); 
     } 
    } 
    else { 
     super.onBackPressed(); 
    } 
} 

在GridMain.java添加一個函數來處理從LandingActivity.java後退按鈕按下事件調用:

protected boolean onBackPressed() { 
    FragmentManager frgManager; 
    frgManager = getFragmentManager(); 
    frgManager.popBackStack(); 
    return true; 
} 

編輯: 也改變'在ChannelGrid.java中添加'替換',否則會破壞R.id.content_frame中的前一個片段

+0

試過這個..但是沒有工作..same輸出.. – 2014-10-31 13:36:16

+1

嘗試'添加'而不是'替換'在ChannelGrid.java – thijsonline 2014-10-31 13:42:37

+0

替換'添加'而不是'替換'在ChannelGrid.java中,當我移動到GridMain片段時,顯示ChannelGrid中的片段。按下後退按鈕可以得到相同的結果。關閉應用程序。 – 2014-10-31 15:46:06

1

保護布爾onBackPressed(){

FragmentManager fragmentManager; 
fragmentManager = getFragmentManager(); 
fragmentManager.pop BackStack(); 
return true; 

}

相關問題