2015-06-09 30 views
5

我正在開發一個使用片段的應用程序,上週我的測試設備採用了lolipop更新。當我在一個lolipop設備上測試我的應用程序時,我看到Fragment Transaction的替換方法無法正常工作。API-21上片段的事務替換留在

雖然在Kitkat版本上一切都很好,但它易於在Lolipop版本中使用。

爲了解釋我的情況,我添加了一些圖像。

- 第一屏幕----------------------------奇巧------------- ------------------------棒棒糖-------------

enter image description here enter image description here enter image description here

正如你所看到的,當我使用kitkat,一切正常,但只要我使用lolipop片段事務替換工作混淆。

這是我的按鈕代碼;

mButtonOk.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       FeedbackFragment mFragmentFeedBack = new FeedbackFragment(); 
       android.app.FragmentManager fm = getFragmentManager(); 
       fm.executePendingTransactions(); 
       android.app.FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
       if (mFragmentFeedBack.isVisible()) { 
        fragmentTransaction.hide(mFragmentFeedBack); 
       } else { 

        if (!mFragmentFeedBack.isAdded()) { 
         fragmentTransaction.replace(R.id.containerfragment, mFragmentFeedBack); 
        } 


        fragmentTransaction.show(mFragmentFeedBack); 
       } 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit(); 

      } 
     }); 

這是我的xml;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:layout_height="match_parent" tools:context=".MainActivity"> 


<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/button" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="117dp" /> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/containerfragment"> 

</FrameLayout> 

編輯:奇巧版本的平板電腦上運行的,但我想我的手機上(奇巧版本)的應用程序的結果是一樣的。沒有變化。

謝謝。

+0

你有沒有檢查平板電腦(與棒棒糖)相同的應用程序? –

+0

是的。它的行爲相同。在測試棒棒糖版本設備時,更換片段留在後面。 – salih

+0

您說過「我看到Fragment Transaction的替換方法無法正常工作」。但在我看來,由於代碼if(mFragmentFeedBack.isVisible()),fragmentTransaction.hide被執行而不是replace()。你認爲這是可能的嗎?在這種情況下,至少檢查KitKat。 –

回答

0

可能的問題可能是代碼:

if (mFragmentFeedBack.isVisible()) 

我不建議使用檢查可見此方法。據文檔@Fragment isVisible(),它說

...這意味着:(1)已被添加,(2)具有連接到 窗口視圖,以及(3)不被隱藏。

這部分句子不是很清楚。我懷疑KitKat說它不可見,但棒棒糖說它是,我同意棒棒糖的實施。 KitKat說添加了片段(是),視圖附加(是),隱藏(不是真的!)。 這實際上是其他GUI庫的GUI問題,不管你信不信!

可能的解決方案,現在:

  1. 創建一個布爾標誌,並保持2個片段之間的國旗。如果這很簡單,這是最好的。
  2. 檢查按鈕或視圖是否可點擊,不知道是哪一個。這比檢查isVisible()更堅實。
  3. 我認爲代碼設計比它應該更復雜一點。現在,這是我的建議。當用戶點擊「New Button」時,只需調用replace()方法,不要使用hide/show方法。當用戶點擊反饋片段中的SEND按鈕時,可以調用popBackStack()或replace()方法。那個怎麼樣?
+0

您的解決方案對我來說似乎很好,但我無法檢查按鈕是否可點擊或無法點擊。因爲,按鈕超時可點擊。所以我無法在我的項目上實現這個解決方案。 :( – salih

+0

可能的解決方案#1如何? –

+0

我在#3上添加了另一種可能的解決方案如果您同意,您能找到它的示例代碼嗎 –