8

LayoutInflater でビューをインフレートします。膨張した RelativeLayout の背景色は、xml ファイルに設定されています。デバイスの 1 つで奇妙な問題が発生しました。(ランダムに) 背景色が、colors.xml の別の (間違った) 色であることがありました。以前にこの問題に遭遇した人はいますか?

詳細:

私は を持ってListViewCursorAdapterます。次のコードを使用して、リスト項目を 1 つの静的項目のみで膨らませます (したがって、リサイクルの問題ではないと思います)。

@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、コードの他の場所で使用していますが、ブックマーク リストやアダプターと共通するものはありません。には別のリソース ID もありますR.java

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最初の色は、2 番目の色は であることに注意してください#f6efde

奇妙なことに、Samsung Galaxy S3 mini という 1 つのデバイスでのみ、10 回の試行ごとに約 2 ~ 3 回エラーを再現できました。

4

3 に答える 3

1

手動で試す

v.setBackgroundColor(getResources().getColor(R.color.app_menu_item_colored_background));
于 2015-11-12T09:14:26.683 に答える
0

4.1 を実行している S2 のテーマの windowBackground にこれを使用しました。この回答で説明されているように、回避策として色の代わりにソリッド ステート ドローアブルを使用しました。これはビューの背景にも機能する予感があります。

私はこの行動の理由を知りません。

于 2016-06-14T22:57:44.830 に答える
0

前に聞いた。バックグラウンドを設定するアダプターで、バックグラウンドを設定していない場合、これが発生します。したがって、呼び出されるすべての getView で背景を設定する必要があります。この背景を設定せず、その状態を保存する場合は、そのビューを null に設定します。

于 2016-06-14T23:03:10.327 に答える