Android: как обновить состояние одного представления на основе состояния другого
Я сталкиваюсь с этой проблемой, решение которой может быть простым, но мои попытки не увенчались успехом.
У меня есть родительский контейнер представления, который содержит три дочерних представления, для которых объявлены обработчики событий onClick и выполняются различные действия.
То, что я пытаюсь сделать, - это добавить рисованные списки состояний для каждого из них, чтобы для разных состояний менялись цвета дочерних представлений.
Вот как это выглядит примерно -
Child View 3 имеет свой собственный список состояний и работает независимо, и у меня есть то, что мне нужно.
Тем не менее, я хочу, чтобы состояние дочерних представлений 1 и 2 изменялось одновременно при изменении состояния любого из них, когда они выполняют свои независимые действия при щелчке. Таким образом, в принципе, если я нажимаю дочернее представление 1 (нажатое состояние), которое, возможно, меняет свой цвет, то же самое должно происходить и для 2, и наоборот. Все это время, детское представление 3 должно быть незатронутым.
Я пробовал несколько способов обхода списков состояний, но безуспешно. Может кто-нибудь помочь мне с этой проблемой?
Я считаю, что должен быть какой-то элегантный способ справиться с этим в Android.
Спасибо!
3 ответа
Если вы отсылаете все это непосредственно к вашему рисунку, это невозможно.
Я уверен, что есть и другие способы, кроме трех на первый взгляд:
Вы можете использовать RadioGroup, а затем использовать экземпляры RadioButton
- это потребует изменений стиля RadioButton по умолчанию
Вы можете создать собственный контейнер вида (производный от
LinearLayout
например), а затем добавить в него логику для обработки кликов из дочерних представлений- использовать источник RadioGroup в качестве ссылки, как это сделал Google
Вы можете использовать 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);
}
для обоих связанных взглядов и слушать изменения состояния друг друга.