1

カスタム アダプターとリスト アイテムの xml レイアウトを使用して ListView を定義する際に問題が発生しています。問題は、私の ListView が押されたときにアイテムを強調表示しないことです。私は次のことをしています:

ドローアブル セレクター xml リソース ファイルを定義します。

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

アイテム レイアウト xml ファイルを定義します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@drawable/btn_voice_item" 
     >

    <ImageButton
        android:id="@+id/voiceItemFavorite"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_centerVertical="true"
        android:layout_margin="5dp"
        android:background="@drawable/btn_favorite" />

    <TextView
        android:id="@+id/voiceItemText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_margin="5dp"
        android:layout_toRightOf="@+id/voiceItemFavorite"
        android:background="@drawable/btn_voice_item" />

</RelativeLayout>

最後に、カスタム データ アダプターにコードを記述して、膨張させてデータを入力してから表示しました。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = context.getLayoutInflater();
        convertView = inflater.inflate(R.layout.voice_item, null);
    }
    VoiceItem i = getItem(position);
    TextView t = (TextView) convertView.findViewById(R.id.voiceItemText);
    t.setText(i.toString());
    ImageButton b = (ImageButton) convertView.findViewById(R.id.voiceItemFavorite);
    b.setTag(i);
    b.setSelected(i.favorite);
    b.setOnClickListener(new FavoriteClick());
    return convertView;
}

リスト内のアイテムを押しても、押したことが視覚的に表示されないことを除いて、すべてが機能します。押されたアイテムの背景の色が、ドローアブル セレクターで定義されたスタイルに移行することを期待しています。

カスタム ビュー アイテムを保持し、押したときにアイテムのスタイルの強調表示を保持するにはどうすればよいですか?

4

2 に答える 2

1

android:background="@drawable/btn_voice_item"ベタなイメージなのでListViewセレクターをカバーしてくれます。ListView selectorカスタムとアイテムのバックラウンド に関する非常に詳細なチュートリアルですListViewTipsandTricks part3 (Cyril Mottier)

于 2012-08-14T01:11:36.450 に答える
0

これは私が使用するxmlです。これはグラデーションであることに注意してください。ただし、これを @android:color/holo_orange_light に入れてください

 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
  android:startColor="#18d7e5"
  android:centerColor="#16cedb"
  android:endColor="#09adb9"
  android:angle="270" />
</shape>

これは私のセレクタです:

  <?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="@drawable/gradient_bg" />

<item android:state_pressed="true"
    android:drawable="@drawable/gradient_bg_hover" />

<item android:state_selected="true"
 android:state_pressed="false"
    android:drawable="@drawable/gradient_bg_hover" />
 </selector>

そして、これは私がリストxmlファイルに持っているものです:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_selector"
android:orientation="horizontal"
android:padding="5dip" >

おそらくあなたはこれが役に立ち、問題を解決できると思います

于 2012-08-13T23:19:13.813 に答える