Android: как обновить состояние одного представления на основе состояния другого

Я сталкиваюсь с этой проблемой, решение которой может быть простым, но мои попытки не увенчались успехом.
У меня есть родительский контейнер представления, который содержит три дочерних представления, для которых объявлены обработчики событий onClick и выполняются различные действия.
То, что я пытаюсь сделать, - это добавить рисованные списки состояний для каждого из них, чтобы для разных состояний менялись цвета дочерних представлений.
Вот как это выглядит примерно -
введите описание изображения здесь

Child View 3 имеет свой собственный список состояний и работает независимо, и у меня есть то, что мне нужно.
Тем не менее, я хочу, чтобы состояние дочерних представлений 1 и 2 изменялось одновременно при изменении состояния любого из них, когда они выполняют свои независимые действия при щелчке. Таким образом, в принципе, если я нажимаю дочернее представление 1 (нажатое состояние), которое, возможно, меняет свой цвет, то же самое должно происходить и для 2, и наоборот. Все это время, детское представление 3 должно быть незатронутым.
Я пробовал несколько способов обхода списков состояний, но безуспешно. Может кто-нибудь помочь мне с этой проблемой?
Я считаю, что должен быть какой-то элегантный способ справиться с этим в Android.
Спасибо!

3 ответа

Если вы отсылаете все это непосредственно к вашему рисунку, это невозможно.

Я уверен, что есть и другие способы, кроме трех на первый взгляд:

  1. Вы можете использовать RadioGroup, а затем использовать экземпляры RadioButton

    • это потребует изменений стиля RadioButton по умолчанию
  2. Вы можете создать собственный контейнер вида (производный от LinearLayout например), а затем добавить в него логику для обработки кликов из дочерних представлений

    • использовать источник RadioGroup в качестве ссылки, как это сделал Google
  3. Вы можете использовать GreenRobot EventBus или любую другую шину для отправки события из вашего просмотра, по которому щелкнули, и любые другие представления могут прослушивать и изменять свои собственные состояния.

Вы можете создать такую ​​функцию

public void setStates(View views[],int clickedViewID){

for(int i=0;i<views.length;i++){
if(views[i].getID==clickedViewID){
//change color
}
else{
// do whatever like chnage color.
views[i].
}
}
}

передать все три дочерних представления и идентификатор щелкнувшего представления.

Здесь, чем вы можете проверить идентификатор трех представлений, если он соответствует, чем изменить цвет этого только в противном случае что-либо еще для всех других представлений.

Как насчет реализации интерфейса, вроде:

OnStateChangeListener() {
    onStateChanged(int color, int whatever);
}

для обоих связанных взглядов и слушать изменения состояния друг друга.

Другие вопросы по тегам