0

コードを変更した後(最初の試行)、同様の問題が発生しています。getView()を更新して、適切な方法で実行しました。

@Override
public View getView( int position, View convertView, ViewGroup parent ) {
    Resources res = activity.getResources();

    if( convertView == null ) {
        LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = vi.inflate( R.layout.video_gallery_item, parent, false ); 
    }

    Bitmap bmp = getBitmap( videoIds[ position ] );

    /* This layer drawable will create a border around the image. This works */
    Drawable[] layers = new Drawable[ 2 ];
    layers[ 0 ] = new BitmapDrawable( res, bmp );
    layers[ 1 ] = res.getDrawable( R.drawable.border_selected );
    LayerDrawable layerDrawable = new LayerDrawable( layers );

    /* Create the StateListDrawable */
    StateListDrawable drawable = new StateListDrawable();
    drawable.addState( StateSet.WILD_CARD, new BitmapDrawable( res, bmp ) );
    drawable.addState( new int[]{ android.R.attr.state_checked, android.R.attr.state_selected }, layerDrawable );
    ImageView v = (ImageView)convertView.findViewById( R.id.image );
    v.setImageDrawable( drawable );
    v.setAdjustViewBounds( true );
    thumbnails[ position ] = bmp;
    return convertView;
}

このアダプタは、videoGalleryと呼ばれるGridViewで使用されています。

videoGallery.setChoiceMode( GridView.CHOICE_MODE_MULTIPLE_MODAL );
videoGallery.setMultiChoiceModeListener( new MultiChoiceModeListener() { ... }

私が抱えている問題は、GridViewでロングクリックして画像を選択しても画像が変わらないことです。アクションバーが変更されたり、コンテキストメニューが表示されたりします。また、XMLを介してStateListDrawableを作成してみたところ、同じ結果が得られました。考え?

アップデート

変化

drawable.addState( new int[]{ android.R.attr.state_checked, android.R.attr.state_selected }, layerDrawable );

drawable.addState( StateSet.WILD_CARD, layerDrawable );

getView()で、探している境界線が表示されます。では、StateListDrawableが状態を変更していないのではないでしょうか。誰か考えがありますか?

4

1 に答える 1

0

よく私はそれを理解しました。私の州にはいくつか問題がありました。順序の最初:

drawable.addState( StateSet.WILD_CARD, new BitmapDrawable( res, bmp ) );
drawable.addState( new int[]{ android.R.attr.state_checked, android.R.attr.state_selected }, layerDrawable );

最初addStateはワイルドカードを使用しています。このため、Androidは次の状態の前にこの状態と一致します。また、Androidがアイテムを「チェック済み」と言っているにもかかわらず、実際の状態は「アクティブ化」されています。そこで、2行を次のように変更しました。

drawable.addState( new int[] { android.R.attr.state_activated }, layerDrawable );
drawable.addState( new int[] { -android.R.attr.state_activated }, new BitmapDrawable( res, bmp ) );

そして、それは完璧に機能しています!

于 2012-08-09T18:47:05.980 に答える