フラグメントが存在するアクティビティにロードされた GridView があります。GridView 自体は Fragment にはありません。BaseAdapter を使用してカスタマー アダプターを作成しましたが、すべて問題なく動作しています。
CustomerAdapter.java
@Override
public View getView( int position, View convertView, ViewGroup parent ) {
ImageView v = new ImageView( activity );
Bitmap bmp = getBitmap( videoIds[ position ] );
v.setImageBitmap( bmp );
v.setAdjustViewBounds( true );
v.setPadding( 5, 5, 5, 5 );
v.setId( position );
thumbnails[ position ] = bmp;
return v;
}
アップロード、削除などの動画を選択できるコンテキスト アクション バーがあります。
videoGallery.setChoiceMode( GridView.CHOICE_MODE_MULTIPLE_MODAL );
videoGallery.setMultiChoiceModeListener( new MultiChoiceModeListener() { ... }
ビデオが選択されたときにビデオの周りに境界線を追加したいので、パディングで背景色を追加するだけです。したがって、上記の新しい MultiChoiceModeListener() セクションにこれがあります。
@Override
public void onItemCheckedStateChanged( ActionMode mode, int position, long id, boolean checked ) {
ImageView image = (ImageView)videoGallery.findViewById( position );
if( checked ) {
image.setBackgroundColor( Color.YELLOW );
} else {
image.setBackgroundColor( Color.TRANSPARENT );
}
int count = videoGallery.getCheckedItemCount();
if( count == 1 ) {
mode.setSubtitle( "1 item selected." );
} else if( count != 0 ) {
mode.setSubtitle( count + " items selected." );
} else {
mode.setSubtitle( null );
}
}
問題は、子ビューが更新されないことです。タイトルが更新されるので、「1 つのアイテムが選択された、2 つのアイテムが選択された、など」) メソッドが呼び出されていることがわかります。ビューが作成されたときにビューにランダム ID を設定し、image.getId() を実行すると正しい ID が提供されるので、ビューが見つかっていることがわかります。