Я пытаюсь создать логику выбора элементов для этого макета.В основном каждый элемент действует как флажок.Теоретически, идея выбора довольно проста: вы нажимаете на элемент один раз - выбираете, нажимаете на него снова - отменяете выбор, нажимаете на другой элемент - выбирается новый, а старый не выбирается.В принципе, вы не можете выбрать более одного.
Что более важно, так это то, что каждый раз, когда вы проверяете элемент, округленный прямоугольный фон меняется с белого (невидимого) на синий с эффектом ряби (у меня уже есть это).фоновый ресурс сделан в XML), затем цвет текста также меняется с синего на белый, чтобы контрастировать с фоном, а также изображение ресурса для значка меняется на белый аналог (на изображении ниже это не означает, что я забыл добавить его,но значок счета должен быть заменен на белую часть счетчика PNG.
Мне нужен интеллектуальный код с минимальными строками, который можно использовать для списка из более чем 100 различных элементов.Также лучший XML-макет для такого выбора.Сначала я жестко закодировал элементы в Linear Layouts и знаю, что это дешевый способ, который не работает со многими элементами.
Это код, который я написал для этого, я попытался добавить каждый текст и значки в списки (включая их идентификаторы XML) и изменить их динамически, ноМне нужно лучшее решение, чем мое.
optionContainers = new LinearLayout[10];
optionTexts = new TextView[10];
optionIcons = new ImageView[10];
drawableBuilderBlue = new int[]{R.drawable.food_blue, R.drawable.flowers_blue, R.drawable.groceries_blue, R.drawable.transport_blue, R.drawable.holiday_blue, R.drawable.bills_blue, R.drawable.clothes_blue, R.drawable.items_blue, R.drawable.pharmacy_blue, R.drawable.others_blue};
drawableBuilder = new int[]{R.drawable.food, R.drawable.flowers, R.drawable.groceries, R.drawable.transport, R.drawable.holiday, R.drawable.bills, R.drawable.clothes, R.drawable.items, R.drawable.pharmacy, R.drawable.others};
idContainers = new String[]{"option_container_1", "option_container_2", "option_container_3", "option_container_4", "option_container_5", "option_container_6", "option_container_7", "option_container_8", "option_container_9", "option_container_10"};
idTexts = new String[]{"option_text_1", "option_text_2", "option_text_3", "option_text_4", "option_text_5", "option_text_6", "option_text_7", "option_text_8", "option_text_9", "option_text_10"};
idIcons = new String[]{"option_icon_1", "option_icon_2", "option_icon_3", "option_icon_4", "option_icon_5", "option_icon_6", "option_icon_7", "option_icon_8", "option_icon_9", "option_icon_10"};
isFood = false; isFlowers = false; isGroceries = false; isTransport = false; isHoliday = false; isBills = false; isClothes = false; isItems = false; isPharmacy = false; isOthers = false;
for (int i = 0; i < idContainers.length; i++) {
tempC = getResources().getIdentifier(idContainers[i], "id", getPackageName());
tempT = getResources().getIdentifier(idTexts[i], "id", getPackageName());
tempI = getResources().getIdentifier(idIcons[i], "id", getPackageName());
optionContainers[i] = dialog.findViewById(tempC);
optionTexts[i] = dialog.findViewById(tempT);
optionIcons[i] = dialog.findViewById(tempI);
optionContainers[i].setBackgroundResource(R.drawable.white_selection);
optionTexts[i].setTextColor(Color.parseColor("#9ca5c4"));
optionTexts[i].setTypeface(SR);
optionIcons[i].setImageResource(drawableBuilderBlue[i]);
int finalI = i;
optionContainers[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
optionContainers[finalI].setBackgroundResource(R.drawable.blue_selection);
optionTexts[finalI].setTextColor(Color.parseColor("#ffffff"));
optionIcons[finalI].setImageResource(drawableBuilder[finalI]);
for(int j = 0; j<finalI; j++)
{
optionIcons[j].setImageResource(drawableBuilderBlue[j]);
optionContainers[j].setBackgroundResource(R.drawable.white_selection);
optionTexts[j].setTextColor(Color.parseColor("#9ca5c4"));
}
for(int k=finalI+1; k<idContainers.length; k++)
{
optionIcons[k].setImageResource(drawableBuilderBlue[k]);
optionContainers[k].setBackgroundResource(R.drawable.white_selection);
optionTexts[k].setTextColor(Color.parseColor("#9ca5c4"));
}
switch (finalI)
{
case 0: isFood = true; isFlowers = false; isGroceries = false; isTransport = false; isHoliday = false; isBills = false; isClothes = false; isItems = false; isPharmacy = false; isOthers = false;
break;
case 1: isFood = false; isFlowers = true; isGroceries = false; isTransport = false; isHoliday = false; isBills = false; isClothes = false; isItems = false; isPharmacy = false; isOthers = false;
break;
case 2: isFood = false; isFlowers = false; isGroceries = true; isTransport = false; isHoliday = false; isBills = false; isClothes = false; isItems = false; isPharmacy = false; isOthers = false;
break;
case 3: isFood = false; isFlowers = false; isGroceries = false; isTransport = true; isHoliday = false; isBills = false; isClothes = false; isItems = false; isPharmacy = false; isOthers = false;
break;
case 4: isFood = false; isFlowers = false; isGroceries = false; isTransport = false; isHoliday = true; isBills = false; isClothes = false; isItems = false; isPharmacy = false; isOthers = false;
break;
case 5: isFood = false; isFlowers = false; isGroceries = false; isTransport = false; isHoliday = false; isBills = true; isClothes = false; isItems = false; isPharmacy = false; isOthers = false;
break;
case 6: isFood = false; isFlowers = false; isGroceries = false; isTransport = false; isHoliday = false; isBills = false; isClothes = true; isItems = false; isPharmacy = false; isOthers = false;
break;
case 7: isFood = false; isFlowers = false; isGroceries = false; isTransport = false; isHoliday = false; isBills = false; isClothes = false; isItems = true; isPharmacy = false; isOthers = false;
break;
case 8: isFood = false; isFlowers = false; isGroceries = false; isTransport = false; isHoliday = false; isBills = false; isClothes = false; isItems = false; isPharmacy = true; isOthers = false;
break;
case 9: isFood = false; isFlowers = false; isGroceries = false; isTransport = false; isHoliday = false; isBills = false; isClothes = false; isItems = false; isPharmacy = false; isOthers = true;
break;
}
}
});
}
Опять же, даже я знаю, что логические значения в нижней части кода крайне непрофессиональны, и мне нужен лучший код для выбора.Спасибо.