Страница 1 из 1
Сравнение строкового ресурса со строкой
Добавлено: 22 июн 2015, 07:47
patalaka
Приветствую! Застрял на одном вопросе. Скажите, вот можно ли как-то сократить запись сравнения содержимого?
Код: Выделить всё
if(String.valueOf("Овен").equals(getResources().getString(R.string.aries))){
Log.d(MainActivity.LOG_TAG, "Получилось");
}else {
Log.d(MainActivity.LOG_TAG, "Опять шляпа");
}
Re: Сравнение строкового ресурса со строкой
Добавлено: 22 июн 2015, 08:12
klblk
1) String.valueOf("Овен") => "Овен" => final static String OVEN = "Овен";
2) строку из ресурсов можно тоже получить заранее => String aries = getResources().getString(R.string.aries));
Итого: String.valueOf("Овен").equals(getResources().getString(R.string.aries)) => OVEN.equals(aries)
Хотя непонятно в чем смысл сравнивать одну константу с другой константой.
Re: Сравнение строкового ресурса со строкой
Добавлено: 22 июн 2015, 08:43
patalaka
klblk писал(а):1) String.valueOf("Овен") => "Овен" => final static String OVEN = "Овен";
2) строку из ресурсов можно тоже получить заранее => String aries = getResources().getString(R.string.aries));
Итого: String.valueOf("Овен").equals(getResources().getString(R.string.aries)) => OVEN.equals(aries)
Хотя непонятно в чем смысл сравнивать одну константу с другой константой.
Есть кнопка для выбора зодиаков, при нажатии она вызывает AlertDialog в который я подаю массив строк(ранее полученый из getResources().getStringArray(R.array.all_zodiacs)).
При нажатии на зодиак, она возвращает id позиции, который можно засунуть в массив. Ну и эту позицию сравниваю с Enum через switch.
Возможно есть и более утонченное решение, я буду рад если вы мне подскажете.
Re: Сравнение строкового ресурса со строкой
Добавлено: 22 июн 2015, 09:38
doter.ua
id позиции зодиака соответствует позиции элемента в массиве?
Re: Сравнение строкового ресурса со строкой
Добавлено: 22 июн 2015, 10:11
Foenix
Для таких целей и вообще лучше сравнивать айди а не строку
Строку сравнивают когда юзер вводит слово сам, а если выбирает из списка то обязательно по ид
Re: Сравнение строкового ресурса со строкой
Добавлено: 22 июн 2015, 14:25
patalaka
Foenix писал(а):Для таких целей и вообще лучше сравнивать айди а не строку
Строку сравнивают когда юзер вводит слово сам, а если выбирает из списка то обязательно по ид
Мне нужно создать 2 массива. Один String - для того что-бы передать его в Alertdialog, и Integer массив - для сравнения id?
Re: Сравнение строкового ресурса со строкой
Добавлено: 22 июн 2015, 14:54
patalaka
doter.ua писал(а):id позиции зодиака соответствует позиции элемента в массиве?
Конечно, я же подаю массив в AlertDialog:
Код: Выделить всё
mImageZodiac.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mZodiacsNames = getResources().getStringArray(R.array.all_zodiacs);
final int[] mIntZodiacNames = {
R.string.aries,
R.string.leo,
R.string.sagittarius,
R.string.taurus,
R.string.virgo,
R.string.capricorn,
R.string.gemini,
R.string.libra,
R.string.aquarius,
R.string.cancer,
R.string.scorpio,
R.string.pisces,
};
AlertDialog.Builder ad = new AlertDialog.Builder(getActivity());
ad.setTitle("Гороскопы");
ad.setItems(mZodiacsNames, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (mIntZodiacNames[which]){
case R.string.aries:
mImageZodiac.setImageResource(R.mipmap.aries);
break;
case R.string.leo:
mImageZodiac.setImageResource(R.mipmap.leo);
break;
case R.string.sagittarius:
mImageZodiac.setImageResource(R.mipmap.sagittarius);
break;
case R.string.taurus:
mImageZodiac.setImageResource(R.mipmap.taurus);
break;
case R.string.virgo:
mImageZodiac.setImageResource(R.mipmap.virgo);
break;
case R.string.capricorn:
mImageZodiac.setImageResource(R.mipmap.capricorn);
break;
case R.string.gemini:
mImageZodiac.setImageResource(R.mipmap.gemini);
break;
case R.string.libra:
mImageZodiac.setImageResource(R.mipmap.libra);
break;
case R.string.aquarius:
mImageZodiac.setImageResource(R.mipmap.aquarius);
break;
case R.string.cancer:
mImageZodiac.setImageResource(R.mipmap.cancer);
break;
case R.string.scorpio:
mImageZodiac.setImageResource(R.mipmap.scorpio);
break;
case R.string.pisces:
mImageZodiac.setImageResource(R.mipmap.pisces);
break;
}
mTitleZodiac.setText(mZodiacsNames[which]);
}
});
ad.create().show();
}
});
вот XML:
Код: Выделить всё
<string name="aries">Овен</string>
<string name="leo">Лев</string>
<string name="sagittarius">Стрелец</string>
<string name="taurus">Телец</string>
<string name="virgo">Дева</string>
<string name="capricorn">Козерог</string>
<string name="gemini">Близнецы</string>
<string name="libra">Весы</string>
<string name="aquarius">Водолей</string>
<string name="cancer">Рак</string>
<string name="scorpio">Скорпион</string>
<string name="pisces">Рыба</string>
<string-array name="all_zodiacs">
<item>@string/aries</item>
<item>@string/leo</item>
<item>@string/sagittarius</item>
<item>@string/taurus</item>
<item>@string/virgo</item>
<item>@string/capricorn</item>
<item>@string/gemini</item>
<item>@string/libra</item>
<item>@string/aquarius</item>
<item>@string/cancer</item>
<item>@string/scorpio</item>
<item>@string/pisces</item>
</string-array>
Пока это лучший вариант из всех что перепробовал. 2 массива, один int для сравнения, второй String для AlertDialog
Re: Сравнение строкового ресурса со строкой
Добавлено: 23 июн 2015, 01:20
Foenix
нет времени вникать, но не забывай, что еще есть двумерные массивы,
или плюс массив имеет значение и индекс. ЗНачение допустим у тебя строка, а по индексу можно что-то с чем-то сравнивать. Используй что тебе удобнее, сравнивая исключительно индексы элементов.