2012-04-25 42 views
0

リストのアイテムがクリックされるたびに、リストビューの背景色を変更しようとしています。Android:ListViewが正しく動作しない

listView.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View view, int pos, 
       long arg3) { 

       listView.getChildAt(pos).setBackgroundResource(R.color.GREY); 
     } 
    }); 

ただし、このコードは期待どおりに機能していません。その動作は不安定です。時々、2つのアイテムの背景が同時に変化し、リストをドラッグすると、すでに変更されているカラーアイテムがリセットされます。

誰でも私を助けることができますか?

Thx!コード内 ラーフル

答えて

1

使用この、描画可能なフォルダにこのxmlファイルを(あなたが望むように色を変更します)入れ

。あなたのメインのレイアウトの使用リストビューで

listselector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
      android:constantSize="true"> 

    <item android:state_focused="false" android:state_pressed="false"> 

    <shape android:shape="rectangle"> 
    <solid android:color="@android:color/transparent"/> 

    <stroke android:width="2dp" android:color="@android:color/transparent" /> 
    <padding android:left="1dp" android:top="1dp" android:right="1dp" 
     android:bottom="1dp" /> 
    </shape> 
    </item> 

    <item android:state_focused="true" android:state_pressed="false"> 

    <shape android:shape="rectangle"> 

    <solid android:color="@color/listitemfocus"/> 
    <stroke android:width="4dp" android:color="@android:color/transparent" /> 
    <padding android:left="1dp" android:top="1dp" android:right="1dp" 
     android:bottom="1dp" /> 
    </shape> 
    </item> 

    <item android:state_pressed="true"> 

    <shape android:shape="rectangle"> 

    <solid android:color="@color/listitempress"/> 
    <stroke android:width="4dp" android:color="@android:color/transparent" /> 
    <padding android:left="1dp" android:top="1dp" android:right="1dp" 
     android:bottom="1dp" /> 
    </shape> 
    </item> 

</selector> 

android:listSelector:

<ListView 
       android:id="@+id/listView1" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:layout_below="@+id/parent_image_view" 
       android:layout_centerHorizontal="true" 
       android:cacheColorHint="@android:color/transparent" 
       android:listSelector="@drawable/listselector" 
       android:scrollbars="none" /> 
0

とリストビューの項目(行)は、パフォーマンスの向上のためにリサイクルされますので、これが起こっています...ビューが画面に表示されていない場合は、次の要素の新しいビューを作成するのではなく、新しいビューを作成する代わりに新しいコンテンツが表示されるので、コロを変更するアイテムを追跡する必要がありますur ... You can see this example... I think it helps ...そこでは、ビューホルダークラスを使ってデータを管理しています。また、colcourの変数も入れて、アイテムの背景色を確認することができます。

関連する問題