2013-08-28 151 views
6

Tôi có bố cục hai ngăn với các nút ở bên trái. Khi một nút được nhấn, đoạn tương ứng của nó sẽ được hiển thị ở bên phải. Đôi khi các mảnh chồng lên nhau nhưng đây là một vấn đề liên tục. Tôi không thể sao chép nó mọi lúc nhưng điều đó xảy raPhân đoạn chồng chéo đôi khi khi chuyển đổi các tab

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; 

Dường như vì tôi thay thế từng đoạn bằng một đoạn mới có thể gây chồng chéo. Có cách nào để xóa tất cả các mảnh trước khi cam kết một mảnh mới không?

+0

Tôi gặp vấn đề tương tự, (luôn luôn sử dụng thay thế), nhưng tôi đang sử dụng thư viện hỗ trợ. Chỉnh sửa: Có vẻ như bạn cũng vậy, nhưng bạn đang gọi getFragmentManager thay vì getSupportFragmentManager ... đó có phải là vấn đề của bạn không? Như với tôi, đó là một vấn đề rất liên tục mà chúng tôi không thể tái tạo. – StackOverflowed

+0

Nó sẽ không cho phép tôi chỉnh sửa bình luận trước đó của tôi nhưng Edit 2: Nếu nó quan trọng, một thiết bị mà chúng tôi đã nhìn thấy nó xảy ra trên là Samsung Galaxy S4. – StackOverflowed

+1

Tôi nghĩ rằng chúng tôi có giải pháp khác tốt hơn so với 'loại bỏ giải pháp' bằng cách sử dụng theo cách này. Trong 'tất cả các tệp xml' của bạn, nên xác định màu nền cho nó, nó sẽ giải quyết vấn đề: Thêm 'android: background =" @ android: color/black "vào thẻ Xem bạn đã xác định. –

Trả lời

2

Như đã đề cập trong StackOverflowed ở trên đây là sự cố không liên tục. Tôi đã tìm cách sửa lỗi này bằng cách viết mã của riêng tôi để xóa bất kỳ đoạn nào hiện có trước khi cam kết một đoạn mới. Dưới đây là mã của tôi:

 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; 
Các vấn đề liên quan