A when
предполагает, что каждое условие приводит к одному действию. (Несколько условий могут привести к одному и тому же действию, но не наоборот.) Итак, если существует соответствие «многие ко многим» между условиями и действиями, я думаю, вы не сможете избежать некоторого повторения.
Я вижу два основных подхода:
Вы можете структурировать код вокруг условий и повторить действие - или, по крайней мере, повторить ссылка на него через функцию - как в ответе chand mohd.
Или вы можете структурировать код вокруг действий и повторить условие:
if (item.id == R.id.button_a)
foo();
if (item.id == R.id.button_b || item.id == R.id_button_c))
bar();
if (item.id == R.id.button_c)
baz();
* 1020. * В некотором смысле этот второй путь менее чист; это означает повторение
item.id ==
много раз, а также повторение
R.id_button_c
. И это может быть немного сложнее, поскольку действия, выполняемые вместе, не обязательно вместе в коде.
Но это более гибко; вам не нужно повторять какие-либо действия или возиться с функциями. Легче вставлять действия, которые всегда выполняются. И если у вас есть некоторые общие ограничения (например, foo()
не может быть вызван после bar()
, тогда их легче кодировать и проверять.
Так что, в конечном итоге, это компромисс. Оба подхода допустимы ; лучший будет зависеть от деталей вашего конкретного случая, от соотношения повторяющихся условий к повторяющимся действиям, от продолжительности действий, от любых ограничений - от формы проблемы, которую вы пытаетесь решить.