#java #android
#java #Android
Вопрос:
В настоящее время я пытаюсь добавить условие, основанное на том, что пользователь выбрал в раскрывающемся списке. Если выбран первый элемент, то данные, введенные в TextView, будут умножены на 34, в противном случае второй элемент будет умножен на 18. Пока я могу проверить, что первый выбор работает так, как должен, но он не распознает второй выбор. Кто-нибудь может объяснить мне, как правильно решить это условие? вот как выглядит мой код.
public class CatalinaFerryTickets extends AppCompatActivity{
String[] ferryRoutes = new String[]{"To Catalina Island", "To Long Beach"};
private Button renderBtn;
EditText handleData;
TextView displayData;
@Override
protected void onCreate(Bundle savedInstanceState) {
// RENDER SPINNER TO DEVICE
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_catalina_ferry_tickets);
final Spinner spin=findViewById(R.id.mySpinner);
final ArrayAdapter<String> myAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, ferryRoutes);
spin.setAdapter(myAdapter);
renderBtn=findViewById(R.id.button);
displayData=findViewById(R.id.textView);
displayData.setMovementMethod(new ScrollingMovementMethod());
renderBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleData=findViewById(R.id.editInput);
int ticketAmount = Integer.parseInt(handleData.getText().toString());
int total;
// FAULTY CONDITIONAL STATEMENT
if (ferryRoutes[0] == "To Catalina Island"){
total = ticketAmount * 34;
displayData.setText(Integer.toString(total));
}
else{
total = ticketAmount * 18;
displayData.setText(Integer.toString(total));
}
}
});
}
}
Ответ №1:
Вы не проверяете, что выбрано, вы проверяете, какое значение находится в статическом массиве. Поэтому он всегда будет занимать одну ветвь. Если вы хотите что-то сделать на основе выбора счетчика, вам нужно фактически запросить у счетчика то, что выбрано.
Ответ №2:
Проблема здесь в том, что ferryRoutes
массив никогда не связан с раскрывающимся компонентом.
Из-за этого условие
if (ferryRoutes[0] == "To Catalina Island")
всегда будет, true
и else
блок никогда не будет выполнен.
Кроме того, никогда не сравнивайте String
(ы), используя оператор равенства ссылок ( ==
). Используйте equals
if ("To Catalina Island".equals(ferryRoutes[0]))
Возможно, вам повезет, если String
(ы) будут интернированы, и это заставит оператор равенства работать. Но не делайте этого, как правило.