Если я неправильно понял ваше требование, отредактируйте ваш вопрос, чтобы уточнить, что вы делаете в каждом утверждении if, предоставив примеры)
Если я правильно понял ваш последний комментарий, и все, что вы делаете в каждом из них, это установление значения Boolean
для вашего Intent
через putExtra
, вы можете использовать bit mask
, чтобы указать, какие флажки отмечены.
Это бит для каждого флажка:
000000000 if nothing is checked
000000001 if only the 1st checkbox is checked
001001000 if 4th and 7th checkbox is checked
etc..
Из этих двоичных чисел вы можете получить представление int каждой возможной комбинации. то есть:
int intRepresentation = 0;
if(checkbox1Checked) intRepresentation += 1;
if(checkbox2Checked) intRepresentation += 2;
if(checkbox3Checked) intRepresentation += 4;
if(checkbox4Checked) intRepresentation += 8;
if(checkbox5Checked) intRepresentation += 16;
if(checkbox6Checked) intRepresentation += 32;
if(checkbox7Checked) intRepresentation += 64;
if(checkbox8Checked) intRepresentation += 128;
if(checkbox9Checked) intRepresentation += 256;
Затем вам нужно всего лишь создать список целых чисел, представляющих все комбинации, для которых вы хотите добавить true. Например, если вы хотите установить значение true для следующих 3 комбинаций:
checkbox1 (0000001 = 1)
checkbox3 and checkbox 5 (000010100 = 20)
checkbox6 (000100000 = 64)
вы составляете этот список:
List<Integer> myList = Arrays.asList(1, 20, 64)
Тогда
int intRepresentation = // whatever value you get from your selected checkboxes
myIntent.putExtra("VALUE_NAME", myList.contains(intRepresentation))
EDIT:
Итак, учитывая ваш конкретный пример, у меня есть другая идея извлечь все условия && и получить графическое представление, которое легко прочитать
Вы можете описать все свои комбинации в виде строки, где каждый символ представляет состояние флажка, «o» отмечен, «x» не проверен, «-» игнорируется. Вот примеры:
"o--------", // check1 is checked (ignore others)
"oo-------", // check1 and check2 are checked (ignore others)
"o--o-x---" // check1 and check4 are checked and check6 is unchecked (ignore others)
Затем вы создаете из него массив
String[] patterns = new String[] {
"o--------",
"oo-------",
"o--o-x---" ,
// and 506 other ones
};
Затем получите состояние ваших флажков, предположите, что 1, 4 и 5 проверены, ваша фактическая ситуация "oxxooxxxx"
Затем вы можете определить метод, чтобы увидеть, соответствует ли ваша фактическая строка шаблону
private boolean match(String actualPattern, String patternToMatch) {
boolean match = true;
for(int i=0; i<patternToMatch.length(); i++) {
if(patternToMatch.charAt(i) != '-'
&& patternToMatch.charAt(i) != actualPattern.charAt(i)) {
match = false;
}
}
return true;
}
Учитывая следующую ситуацию "oxxooxxxx"
, он будет соответствовать шаблонам [0] ("o--------"
), потому что установлен флажок 1, и шаблонам [2] ("o--o-x---"
), поскольку флажки 1 и 4 отмечены, а 6 не
Наконец, измените ваш код следующим образом:
Intent intent = new Intent(this, activity.class);
if (some_variable == 1) {
intent.putExtra("1", match(stringRepresentation, patterns[0]));
intent.putExtra("2", match(stringRepresentation, patterns[1]));
//and other 507 variants
} else if (some_variable == 2) {
intent.putExtra("3", match(stringRepresentation, patterns[0]));
intent.putExtra("4", match(stringRepresentation, patterns[1]));
//and other 507 variants
}
startActivity(intent);
Дальнейшее упрощение:
Если, как кажется, код внутри ваших ifs одинаков и отличаются только названия дополнительных элементов, вы можете еще больше упростить код, заменив все свои ifs следующим образом:
Создайте карту со списком имен дополнений для каждого возможного значения some_variable. В приведенном выше примере это будет выглядеть следующим образом.
Map<Integer, String[]> extraNames = new HashMap<Integer, String[]>() {{
put(1, new String[] {"1", "2"});
put(2, new String[] {"3", "4"});
}};
Тогда все ваши if могут быть удалены, и вы можете заменить их, написав:
intent.putExtra(extraNames[some_variable][0], match(stringRepresentation, patterns[0]));
intent.putExtra(extraNames[some_variable][1], match(stringRepresentation, patterns[1]));
//etc ..
И это работает, я думаю, мы можем пойти еще дальше и написать
for(int i=0; i<extraNames.keySet().size(); i++) {
intent.putExtra(extraNames[some_variable][i], match(stringRepresentation, patterns[i]));
}