2

Androidアプリケーションに2色ListViewのがあります(奇数要素用に1色、偶数要素用に1色)。そして、それはフローズンヨーグルトでうまく機能します。しかし、Jelly Beanエミュレーターでは、スクロール中にいくつかのアーティファクトが表示されます。一部の要素の背景が黒くなります。はい、透明なキャッシュカラーヒントを使用したソリューションについて知っています。ただし、このように背景を設定した場合にのみ機能します。

bindView()アダプターの方法:

// ...
view.setBackgroundResource(
        cursor.getPosition() % 2 == 0 ? R.color.list_item_bg1: R.color.list_item_bg2);

しかし、要素を強調表示したいので、この方法は私には適していません。次に、ユーザーはそれをタップします。だから私StateListDrawableはこの目的のために使用します:

mOddColorDrawable = new ColorDrawable(
        context.getResources().getColor(R.color.list_item_bg2));
mEvenColorDrawable = new ColorDrawable(
        context.getResources().getColor(R.color.list_item_bg1));
mSelector = new ColorDrawable(
    context.getResources().getColor(R.color.list_item_selector));

public void bindView(View view, Context context, Cursor cursor) {
    // ...
    setBackground(cursor.getPosition % 2 != 0, view);
}

public void setBackground(boolean isOdd, View listItem) {
    StateListDrawable dr = new StateListDrawable();
    Drawable drColor = isOdd ? mOddColorDrawable : mEvenColorDrawable;
    dr.addState(new int[] { android.R.attr.state_pressed }, mSelectorDrawable);
    dr.addState(new int[] { -android.R.attr.state_pressed }, drColor);
    listItem.setBackgroundDrawable(bg);
}

したがって、このコードでは、に透明な色のヒントを設定しても、スクロール中に黒い要素の背景が表示されListViewます。私はこの問題を調査するために何日も費やしましたが、それを克服することはできませんでした。だから、あなたは私の最後の希望です、StackOverflow!

概要:

  1. 2つの異なる要素色のListViewが欲しいのですが。
  2. カスタムカラーのアイテムセレクターが欲しいのですが。
  3. StateListDrawableを使用した場合、setCacheColorHint(transparent)は役に立ちませんでした。
  4. フローズンヨーグルトではすべて正常に機能しますが、ジェリービーンズでは機能しません。
4

7 に答える 7

5

リストアイテムの背景色を変更するため。アダプタクラスにこのコード行を記述します

public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.listitem, null);

            if (position % 2 == 0) {
                v.setBackgroundResource(R.color.firstcolor);
            } else {
                v.setBackgroundResource(R.color.second color);
            } 
         ...............
         .........

こんにちは完全なヘルプについては、私のAndroidブログをご覧ください。探しているとおりに、答えが見つかることを願っています。ちょうど今、私は自分の側からやってテストしました、それは私にとってうまく機能しています。下部にリンクがあり、完全なソースコードをダウンロードできます。

http://amitandroid.blogspot.in/2013/03/android-listview-with-alternate-list.html

それがあなたの要件を完全に満たすかどうか私に知らせてください。

于 2013-03-06T09:14:41.347 に答える
2

リストビューでcacheColorHint="#00000000"を設定します。

詳細については..この投稿を読んでくださいAndroidのListViewでスクロール中に黒い画面を取得する

于 2013-03-06T05:51:17.360 に答える
1

ダイナミックリストビューを使用している場合は、黒い画面を避けるため

ListView listview=new ListView();
listview.setCacheColorHint(0);

アイテムをクリックしながら透明なリストアイテムを作成したい場合は、もう1つ黄色に見えます。これを避けるために

listview.setSelector(new ColorDrawable(0x0));

レイアウト用//リストアイテムの選択またはクリック時に黄色を避けるため

android:listSelector="#00000000"

ありがとう、

于 2013-03-06T06:05:48.003 に答える
0

こんにちは、詳細についてはこのチュートリアルを確認してください。

ListViewタグに属性を追加します

 android:cacheColorHint="#00000000"// setting as a transparent color
于 2013-03-06T05:58:59.343 に答える
0

setSelector(new ColorDrawable(0x0)); listitemをクリックするときに黄色を避けるために使用されます。ListItemにホバー効果が必要な場合は、listiemでselctorを使用してください。

listiemselector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
 <item 
 android:state_selected="false"
    android:state_pressed="false" 
    android:drawable="@color/white" />
<item android:state_pressed="true" 
    android:drawable="@color/selected" />
<item android:state_selected="true"
 android:state_pressed="false" 
    android:drawable="@color/selected" />
</selector>

それをlistitemの親レイアウトで使用します。

android:background="@drawable/listiemselector"
于 2013-03-06T09:02:41.957 に答える
0

リストからアイテムを削除すると、リストが黒色になるという同じ問題に直面していました。今日は、listViewの「android:background」属性を削除するだけで解決しました。正常に動作します。

于 2013-06-13T04:29:59.157 に答える
0

mListView.setFadingEdgeLength(0);を使用してください 。ここで、mListViewはListViewオブジェクト参照です。それは完璧に動作します。

于 2013-12-04T09:32:04.543 に答える