2013-08-28 7 views
6

Ich habe ein Layout mit zwei Fenstern mit meinen Tasten auf der linken Seite. Wenn eine Schaltfläche gedrückt wird, wird das entsprechende Fragment rechts angezeigt. Manchmal überlappen sich die Fragmente, aber das ist ein zeitweiliges Problem. Ich kann es nicht replizieren die ganze Zeit, aber es passiertFragment überschneidet sich manchmal beim Wechseln von Tabs

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.imageButtonSettingsManageBooks: 
     SettingsManageBooksFragment mbFragment = new SettingsManageBooksFragment(); 
     getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, mbFragment).addToBackStack(null).commit(); 
     mImgFragmentTitle.setImageResource(R.drawable.manage_my_books); 
     this.getSupportFragmentManager().executePendingTransactions(); 


     break; 
    case R.id.imageButtonSettingsPurchaseHistory: 
     SettingsPurchaseHistoryFragment phFragment = new SettingsPurchaseHistoryFragment(); 
     getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, phFragment).commit(); 
     mImgFragmentTitle.setImageResource(R.drawable.purchase_history); 
     this.getSupportFragmentManager().executePendingTransactions(); 

     break; 
    case R.id.imageButtonSettingsAudio: 
     SettingsAudioFragment aFragment = new SettingsAudioFragment(); 
     getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, aFragment).commit(); 
     mImgFragmentTitle.setImageResource(R.drawable.audio); 
     this.getSupportFragmentManager().executePendingTransactions(); 

     break; 
    case R.id.imageButtonSettingsRestore: 
     SettingsRestoreFragment rFragment = new SettingsRestoreFragment(); 
     getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, rFragment).commit(); 
     mImgFragmentTitle.setImageResource(R.drawable.restore); 
     this.getSupportFragmentManager().executePendingTransactions(); 

     break; 
    case R.id.imageButtonSettingsCopyright: 
     SettingsCopyrightFragment cFragment = new SettingsCopyrightFragment(); 
     getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, cFragment).commit(); 
     mImgFragmentTitle.setImageResource(R.drawable.copyright); 
     this.getSupportFragmentManager().executePendingTransactions(); 

     break; 
    case R.id.imageButtonSettingsAbout: 
     SettingsAboutFragment abFragment = new SettingsAboutFragment(); 
     getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, abFragment).commit(); 
     mImgFragmentTitle.setImageResource(R.drawable.about); 
     this.getSupportFragmentManager().executePendingTransactions(); 

     break; 

Es sieht aus wie, weil ich jedes Fragment mit einem neuen Fragment am ersetzt, der die Überlappung verursachen könnte. Gibt es eine Möglichkeit, alle Fragmente zu löschen, bevor Sie eine neue beginnen?

+0

Ich bekomme das gleiche Problem, (immer mit Ersetzen auch), aber ich benutze die Support-Bibliothek. Bearbeiten: Es scheint, als ob Sie auch sind, aber Sie rufen getFragmentManager anstelle von getSupportFragmentManager ... könnte das Ihr Problem sein? Wie bei mir ist es ein sehr zeitweiliges Problem, das wir nicht reproduzieren können. – StackOverflowed

+0

Es würde mich nicht erlauben, meinen vorherigen Kommentar zu bearbeiten, aber Edit 2: Wenn es darauf ankommt, ist das Samsung Galaxy S4 das Gerät, auf dem wir es gesehen haben. – StackOverflowed

+1

Ich denke, wir haben die andere Lösung besser als "Lösung entfernen" mit diesem Weg. In 'alle Ihre XML-Dateien', sollte die Hintergrundfarbe dafür definieren, es wird das Problem lösen: Fügen Sie diese 'android: background =" @ android: color/black "in das von Ihnen definierte View-Tag. –

Antwort

2

Wie von StackOverflowed oben erwähnt, ist dies ein zeitweiliges Problem. Ich habe einen Weg gefunden, das zu beheben, indem ich meinen eigenen Code schreibe, um alle vorhandenen Fragmente zu entfernen, bevor ich einen neuen Code beginne. Unten ist mein Code:

 fragmentManager = getFragmentManager(); 
     ft = fragmentManager.beginTransaction(); 

     mbFragment = new SettingsManageBooksFragment(); 
     ft.replace(R.id.setting_detail_container2, mbFragment).commit(); 
     mImgFragmentTitle.setImageResource(R.drawable.manage_my_books); 

    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.imageButtonSettingsManageBooks: 

      if (mPurchaseHistory == true) { 
       ft.remove(phFragment); 

       Log.d(TAG, "REMOVING PURCHASE HISTORY FRAG"); 

      } else if (mAudio == true) { 
       ft.remove(aFragment); 

       Log.d(TAG, "REMOVING AUDIO FRAG"); 
      } else if (mRestore == true) { 
       ft.remove(rFragment); 

       Log.d(TAG, "REMOVING RESTORE FRAG"); 
      } else if (mCopyright == true) { 
       ft.remove(cFragment); 

       Log.d(TAG, "REMOVING COPYRIGHT FRAG"); 
      } else if (mAbout == true) { 
       ft.remove(abFragment); 

       Log.d(TAG, "REMOVING ABOUT FRAG"); 
      } 
      ft = fragmentManager.beginTransaction(); 
      mbFragment = new SettingsManageBooksFragment(); 
      ft.replace(R.id.setting_detail_container2, mbFragment).commit(); 
      mImgFragmentTitle.setImageResource(R.drawable.manage_my_books); 
      mManageBooks = true; 
      mPurchaseHistory = false; 
      mAudio = false; 
      mRestore = false; 
      mCopyright = false; 
      mAbout = false; 

      break;