2013-08-28 2 views
6

私は左にマイボタンがある2つのペインレイアウトを持っています。ボタンを押すと、対応するフラグメントが右側に表示されます。フラグメントが重なることもありますが、これは断続的な問題です。私はすべての時間、それを複製することはできませんが、それはタブを切り替えるときにフラグメントが重複することがある

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; 

それは私がオーバーラップを引き起こしている可能性があり、新たなフラグメントと、各断片を交換していますので、のように見えるが起こるん。新しいものを作る前にすべての断片をクリアする方法はありますか?

+0

私は、(いつものようにも置き換え使用して)同じ問題を取得していますが、私はサポートライブラリを使用しています。編集:それはあなたのようにも思われるが、あなたgetSupportFragmentManagerの代わりにgetFragmentManagerを呼び出すよ...あなたの問題かもしれない?私と同じように、それは再現できない非常に断続的な問題です。 – StackOverflowed

+0

それは私の前のコメントを編集することはできませんでしたが、編集2:それが問題であれば、それが起こったことを見た1つのデバイスはSamsung Galaxy S4です。 – StackOverflowed

+1

私は、この方法で 'solutionを削除する 'よりも優れたソリューションがあると思います。 'すべてのxmlファイル'に、背景色を定義する必要があります。 定義したビュータグに、このandroid:background = "@ android:color/black"を追加します。 –

答えて

2

上記のStackOverflowedで説明したように、これは断続的な問題です。私は、新しいものをコミットする前に既存のフラグメントを削除するために私自身のコードを書いてこれを修正する方法を見つけました。以下は私のコードです:

 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; 
関連する問題