Я работаю над добавлением выделения onClick в представление в сетке перетаскивания в Android. Проект находится на GitHub (ветка dev содержит код, использующий селектор).
Проблема, с которой я сталкиваюсь, заключается в адаптере, когда я устанавливаю селектор onClick в качестве фона представления, когда я нажимаю на представление, вместо изменения фона только для этого представления селектор меняет фон для всех представлений.
Я почти уверен, что это результат того, как клики обрабатываются в onTouch в ViewGroup (ниже). Я не уверен, должен ли я возвращать true/false по-разному или запускать прослушиватель onClick по-разному, чтобы предотвратить выделение всех представлений.
Любые идеи/помощь приветствуются, спасибо.
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
touchDown(event);
break;
case MotionEvent.ACTION_MOVE:
touchMove(event);
break;
case MotionEvent.ACTION_UP:
touchUp(event);
break;
}
if (aViewIsDragged())
return true;
return false;
}
private void touchUp(MotionEvent event) {
if(dragged == -1) {
if(onClickListener != null) {
View clickedView = getChildAt(getTargetAtCoor((int) event.getX(), (int) event.getY()));
if(clickedView != null)
onClickListener.onClick(clickedView);
}
} else {
manageChildrenReordering();
hideDeleteView();
cancelEdgeTimer();
movingView = false;
dragged = -1;
lastTarget = -1;
container.enableScroll();
cancelAnimations();
}
}
РЕДАКТИРОВАТЬ: После просмотра документации ViewGroup android:addStatesFromChildren похоже на то, что я ищу, но, похоже, это не имеет никакого эффекта.
Android: добавитьStatesFromChildren
Устанавливает, включают ли состояния рисования этой ViewGroup также его дочерние состояния рисования. Это используется, например, для того, чтобы группа казалась сфокусированной, когда фокусируется ее дочерний элемент EditText или кнопка.
Должно быть логическое значение, либо "true", либо "false".
Это также может быть ссылка на ресурс (в виде "@[package:]type:name") или атрибут темы (в виде "?[package:][type:]name"), содержащий значение этого типа. .
Это соответствует символу ресурса глобального атрибута addStatesFromChildren.
ОБНОВЛЕНИЕ
Я нашел способ решить эту проблему. Запрос на вытягивание находится здесь