2011-10-11 59 views
3

我有一個用於Fragment(android.support.v4.app.Fragment)的xml佈局。當第一次添加此片段時,背景可繪製顯示正常。但是當這個片段被另一個片段替換,然後再次替換回來(通過創建一個新實例並使用FragmentTransaction.replace()),背景可繪製消失(,但不是所有情況下均爲,見下文)。下面是片段的佈局XML:Android:RelativeLayout背景可繪製消失

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <include layout="@layout/footer_photos" /> 
    <RelativeLayout 
     android:id="@+id/pageLayout" 
     android:background="@drawable/body_background2" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@id/footer"> 
     <ImageView 
      android:id="@+id/page" 
      android:layout_height="500dp" 
      android:layout_width="400dp" 
      android:layout_centerInParent="true" 
      android:background="#FFF" /> 
    </RelativeLayout> 
</RelativeLayout> 

有問題的背景繪製在RelativeLayout的id爲「頁面佈局」。

可能的線索:

  • 當我刪除在那裏的ImageView,背景繪製顯示了罰款。
  • 其他碎片具有相似的佈局xmls(具有相同的背景可繪製),但沒有ImageViews在裏面,他們工作正常。
  • 其中的一個碎片有一個WebView和其中的按鈕,並且這個背景顯示正常。
  • 用有問題的片段替換「WebView片段」後,背景顯示正常(!?)。

編輯:如果一個圖像加載到ImageView然後一個對話框主題的活動在它上面啓動,然後完成相同的問題始終發生。我的解決方案解決了這兩種情況。

回答

1

找到比我最後一個更好的解決方案。在的onResume()的片段,只需要做:

getView().post(new Runnable() { 
     @Override 
     public void run() { 
      View v = getView(); 
      if (v != null) 
       v.invalidate(); 
     } 
    }); 

它會導致閃爍,但至少它似乎工作始終。

+1

我認爲使用獨立的ImageViews而不是使用android:background屬性可以解決問題。 – Ken

-1

片段所取代,與它們的背景,這意味着沿

  1. 當一個片段A由片段B,背景變爲片段B的背景代替

  2. 如果你不給任何背景片段B,然後就可以看到B片段在片段A.

+0

它們都具有相同的背景可繪製。在我的情況下,我添加A,然後用B代替A,然後再次用A代替B,並且此時A的背景可繪製不被繪製(顯示爲黑色)。 – Ken

0

我也有類似的問題。使用相關佈局,有一個imageView和一個textView。 我決定一起bringToFront方法的調用:

myImageView.bringToFront(); 

希望這有助於。

+0

沒有工作:(。相同的結果 – Ken

+0

你可以粘貼一些代碼? – Ivan

0

好的,我在解決這個問題的同時試圖解決另一個問題。該問題通過調用page ImageView上的setLayoutParams()(使用任何佈局參數)來解決。這導致了RelativeLayout的背景再次出現。問題的原因仍然未知...