У меня проблемы с пониманием того, как сравнивать строки в Java для Android. Я написал код для этого на JavaScript и Palm, но я новичок в Java и немного запутался. Например, я пытаюсь изменить пример на сайте разработчиков Android для SpinnerActivity (http://developer.android.com/resources/samples/Spinner/src/com/android/example/spinner/SpinnerActivity.html). В моем приложении я смотрю на размеры труб в счетчике, а не на планетах. Когда пользователь выбирает размер трубы, я хочу сослаться на массив размеров труб и иметь возможность выбирать другие параметры, связанные с этим размером трубы, такие как внешний диаметр (OD) трубы. Я изменил приведенный выше пример кода и добавил и массив для размеров труб и размеров наружного диаметра. Затем я пытаюсь сравнить то, что пользователь выбрал в счетчике размеров труб, с моим массивом размеров труб и использовать номер массива, который соответствует, чтобы выбрать связанный OD. Что-то не так с тем, как я пытаюсь провести это сравнение. Я установил оба этих значения как укусы, но они, кажется, никогда не находят друг друга.
Раздел HelloSpinner1.java, который я изменил:
public void onItemSelected(AdapterView<?> parent, View v, int pos, long row) {
HelloSpinner1.this.mPos = pos;
HelloSpinner1.this.mSelection = parent.getItemAtPosition(pos).toString();
/*
* Set the value of the text field in the UI
*/
TextView resultText = (TextView)findViewById(R.id.SpinnerResult);
resultText.setText(HelloSpinner1.this.mSelection);
String[] OD; // array of pipe ODs
OD = new String[30]; // allocates memory for 30 floating point numbers
OD[0] = "0.405";
OD[1] = "0.540";
OD[2] = "0.675";
OD[3] = "0.840";
OD[4] = "1.050";
OD[5] = "1.315";
OD[6] = "1.660";
OD[7] = "1.9";
OD[8] = "2.375";
OD[9] = "2.875";
OD[10] = "3.5";
OD[11] = "4";
OD[12] = "4.5";
OD[13] = "5.563";
OD[14] = "6.625";
OD[15] = "8.625";
OD[16] = "10.750";
OD[17] = "12.75";
OD[18] = "14";
OD[19] = "16";
OD[20] = "18";
OD[21] = "20";
OD[22] = "22";
OD[23] = "24";
OD[24] = "26";
OD[25] = "28";
OD[26] = "30";
OD[27] = "32";
OD[28] = "34";
OD[29] = "36";
String [] Size;
Size = new String [30];
Size[0] = "1/8";
Size[1] = "1/4";
Size[2] = "3/8";
Size[3] = "1/2";
Size[4] = "3/4";
Size[5] = "1";
Size[6] = "1-1/4";
Size[7] = "1-1/2";
Size[8] = "2";
Size[9] = "2-1/2";
Size[10] = "3";
Size[11] = "3-1/2";
Size[12] = "4";
Size[13] = "5";
Size[14] = "6";
Size[15] = "8";
Size[16] = "10";
Size[17] = "12";
Size[18] = "14";
Size[19] = "16";
Size[20] = "18";
Size[21] = "20";
Size[22] = "22";
Size[23] = "24";
Size[24] = "26";
Size[25] = "28";
Size[26] = "30";
Size[27] = "32";
Size[28] = "34";
Size[29] = "36";
String ODSize;
for (int i = 0; i <= 29; i++){
if (Size.equals("HelloSpinner1.this.mSelection")) {
ODSize = OD[i];
break;
}
}
}
Связанный файл strings.xml на сайте Android с небольшими изменениями:
Труба и трубка
1/8 1/4 3/8 3/4 1 1-1/4 1-1/2 2 2-1/2 3 3-1/2 4 5 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 Выберите размер трубы
1 ответ
Просто быстрое примечание, но я вижу здесь две вещи:
1) У вас "HelloSpinner1.this.mSelection" в кавычках. Внутри .equals это сравнивает вашу переменную Size непосредственно с этой строкой... а не со значением, хранящимся в этом объекте. Например, вы спрашиваете: "1/8" ?= "HelloSpinner1.this.mSelection" ... а не "1/8" ?= "1/4" в данном случае. Это может быть большая часть вашей проблемы здесь.
2) Вы можете просто использовать положение счетчика внутри вашего метода Listener. Это дает вам позицию выбора на счетчике. Если вы не изменяете эти значения, вы уже знаете индекс в своем массиве. Если вы изменяли их, /тогда/ вы могли бы выполнить сравнение строк (или одновременно изменить свой массив, чтобы поддерживать их в актуальном состоянии).
Вы также можете проверить, с чем вы сравниваете, как только устраните проблему с кавычками. Очень простой способ сделать это — объявить String для каждого значения, а затем запустить его в отладчике или зарегистрировать вывод.
Наконец, как личное предпочтение, я не люблю хранить длинные массивы, которые не будут меняться в файле xml. Просто закодируйте это как массив, который не нужно интерпретировать позже. Это даст вам прямой доступ к массиву и немного ускорит выполнение.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.