簡體   English   中英

三星設備對待FragmentTransactions的方式與其他設備不同嗎?

[英]Do Samsung devices treat FragmentTransactions differently than other devices?

我一直在努力解決一個讓我瘋狂多年的問題。 我有一個應用程序,其中一個活動通過動態片段交換顯示不同的屏幕,即通常的

getFragmentManager().beginTransaction().replace(R.id.fragementContainer, new SomeFragment()).commit();

這適用於我的Nexus 4,Nexus 5,Nexus 7 2012,Nexus 7 2013,Moto G 1st gen等。除三星設備(SGS5,SGS6)外,其他大部分都是如此。 在這些設備上,有時(很少,但不是很少), replace()調用似乎被誤解為add()調用,新片段出現在前一個上面。

我試過復制這個bug,但似乎沒有任何模式。 由於我在任何地方都沒有收到錯誤消息,因此我無法對其進行故障排除。

這就是我總是使用支持庫的原因。 源代碼在您的項目中,並未被第三方修改。 你已經在使用支持包嗎?

這很可能是由一些三星“優化”造成的。 我唯一可以建議的是使用remove()add()而不是replace() FragmentTransaction的實現是不同的,因此有可能表現不同。

您實際上可以輕松刪除該片段,因為它具有與容器相同的ID。 試試這個:

FragmentTransaction transaction = fragmentManager.beginTransaction();

Fragment oldFragment = fragmentManager.findFragmentById(R.id.container);
if (oldFragment != null) transaction.remove(oldFragment);

transaction.add(R.id.container, new Fragment(), "tag").commit();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM