LayoutInflater有时(随机)膨胀错误的背景颜色

时间:2013-08-08 12:45:27

标签: android colors android-listview layout-inflater

我使用LayoutInflater扩展视图。我的膨胀RelativeLayout的背景颜色在我的xml文件中设置。我在我的一个设备上遇到了一个奇怪的问题:有时(随机)背景颜色是我的colors.xml中的另一种(错误的)颜色。有没有人以前遇到过这个问题?

详细说明:

我有ListView CursorAdapter。我只使用一个静态项目来扩充列表项(所以我认为这不是回收问题),使用此代码:

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
    View v = vi.inflate(R.layout.bookmark_item, null) ;
    //bindView(v, context, cursor) ;
    Log.wtf("newView", "View color: " + Integer.toString(((ColorDrawable) (((RelativeLayout)v.findViewById(R.id.bookmark_row)).getBackground())).getColor())) ;
    return v;
}

我的layout/bookmark_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:id="@+id/bookmark_row"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/app_menu_item_background"
        tools:ignore="UselessParent" >

        <TextView 
            android:id="@+id/bookmark_item_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
        />
    </RelativeLayout>

</RelativeLayout>

内部RelativeLayout的背景颜色设置为@color/app_menu_item_background。此颜色位于我的R.java

public static final int app_menu_item_background=0x7f0a0036; 

我还有一个名为@color/app_menu_item_colored_background的颜色,我在代码中的其他地方使用的颜色,它与我的书签列表和适配器没有任何共同之处。它在R.java中也有不同的资源ID:

public static final int app_menu_item_colored_background=0x7f0a0038;

它们都有不同的颜色:

<color name="app_menu_item_background">#517409</color>
<color name="app_menu_item_colored_background">#f6efde</color>

然后,在运行我的应用时,有时(并非总是),我的视图使用错误的app_menu_item_colored_background背景颜色。我记录了膨胀的视图颜色(见上面的代码),它甚至有时不同:

"newView" - "View color: -11439095"
"newView" - "View color: -593954"

注意,第一种颜色是#517409,第二种颜色是#f6efde

奇怪的是,我只能在一台设备上重现错误,三星Galaxy S3 mini,每10次尝试大约2-3次。

3 个答案:

答案 0 :(得分:1)

手动尝试

v.setBackgroundColor(getResources().getColor(R.color.app_menu_item_colored_background));

答案 1 :(得分:0)

我的主题是windowBackground,用于运行4.1的S2。如this answer中所述,我使用固态drawable代替颜色作为变通方法。我有预感,这也适用于视图背景。

我不知道这种行为的原因。

答案 2 :(得分:0)

我之前听过。 在您的适配器中,您设置背景,如果您没有设置背景,则会发生这种情况。因此,您应该在每个调用的getView中设置背景。如果您没有设置此背景,并且希望保存其状态,则将该视图设置为null。