2011-10-11 74 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的背景再次出现。问题的原因仍然未知...