В режиме действия несколько элементов выбора в виде сетки
Как я могу выбрать несколько элементов в виде сетки, когда я нахожусь в режиме действия?
Я реализовал этот способ, но не функцию:
Макет фрагмента:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal|center_vertical"
android:orientation="vertical"
android:theme="@style/AppTheme">
<GridView
android:id="@+id/gridview1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="0dp"
android:choiceMode="multipleChoiceModal"
android:listSelector="@drawable/selected"
android:drawSelectorOnTop="true"
android:gravity="fill"
android:horizontalSpacing="2dp"
android:numColumns="3"
android:paddingTop="5dp"
android:stackFromBottom="true"
android:stretchMode="columnWidth"
android:verticalSpacing="2dp"
android:visibility="visible"/>
</LinearLayout>
Селектор списка состояний (selected.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- un click-->
<item android:drawable="@color/pressed" android:state_pressed="true"/>
<item android:drawable="@color/selected" android:state_selected="true"/>
<!--checkatto-->
<item android:drawable="@color/checkable" android:state_checkable="true"/>
<!-- while selected in actionmode -->
<item android:state_activated="true" android:drawable="@color/activate" />
<item android:drawable="@color/standard"/>
</selector>
Адаптер (создайте динамическое представление, например, настраиваемое изображение ()
public View getView(int position, View convertView, ViewGroup parent)
{
CheckableImageView checkableImageView;
if (convertView == null)
{
checkableImageView = new CheckableImageView(mContext);
checkableImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
checkableImageView.setMinimumHeight(300);
} else {
checkableImageView = (CheckableImageView) convertView;
}
Bitmap bitmap = cachePhoto.get((long) position);
if (bitmap != null) {
checkableImageView.setImageBitmap(cachePhoto.get((long)
position));
} else {
try {
//task async
CaricaImmagine(listMedia.get(position),checkableImageView,position);
} catch (Exception e)
{}
}
Подкласс для проверяемого состояния просмотра изображений
public class CheckableImageView extends android.support.v7.widget.AppCompatImageView implements Checkable {
private boolean mChecked;
private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };
public CheckableImageView(final Context context) {
super(context);
}
@Override
public int[] onCreateDrawableState(final int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked())
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
return drawableState;
}
@Override
public void toggle() {
setChecked(!mChecked);
}
@Override
public boolean isChecked() {
return mChecked;
}
@Override
public void setChecked(final boolean checked) {
if (mChecked == checked)
return;
mChecked = checked;
refreshDrawableState();
}
}
Слушатель для режима действий (CAB)
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
actionMode.getMenuInflater().inflate(R.menu.contexmenumultiselection, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
}
Я могу полностью в Action Mode, но множественный выбор не работает (пользовательский просмотр изображения не изменяется bgcolor), почему? где я не прав?