#android #string #button #arraylist
#Android #строка #кнопка #список массивов
Вопрос:
В моем приложении есть список вопросов.Когда вызывается функция getfirstquestion, она случайным образом выбирает вопрос, а после этого случайным образом помещает тексты на каждую из 4 кнопок (одна из них является ответом на вопрос).
Каждый раз при нажатии кнопки функция checkanswer проверяет, совпадает ли текст кнопки с правильным ответом на правильный вопрос.Если это так, он удаляет текущий вопрос и вызывает функцию getfirstquestion(), чтобы изменить вопрос.
Программа работает нормально, однако ничего не происходит, когда я нажимаю кнопку правильного ответа.Кто-нибудь может сказать мне, почему, и дать мне решение? Я ищу код с 2 часов назад….
public class startgame extends Activity implements OnClickListener{
final Random rgenerator = new Random();
List<String> questionss1 = new ArrayList<String>();
String thequestion;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.level1);
questionss1.add("Who is the actual CEO at Apple?");
questionss1.add("Who is the actual CEO at Microsoft?");
questionss1.add("Who is the actual CEO at Google?");
getfirstquestion();
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
Button button2 = (Button)findViewById(R.id.button2);
button2.setOnClickListener(this);
Button button3 = (Button)findViewById(R.id.button3);
button3.setOnClickListener(this);
Button button4 = (Button)findViewById(R.id.button4);
button4.setOnClickListener(this);
}
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.button1:
Button button1 = (Button)findViewById(R.id.button1);
checkanswer((String) button1.getText());
case R.id.button2:
Button button2 = (Button)findViewById(R.id.button2);
checkanswer((String) button2.getText());
case R.id.button3:
Button button3 = (Button)findViewById(R.id.button2);
checkanswer((String) button3.getText());
case R.id.button4:
Button button4 = (Button)findViewById(R.id.button2);
checkanswer((String) button4.getText());
}
}
public int checkanswer(String buttontext) {
if (thequestion.equals("Who is the actual CEO at Apple?") amp;amp; buttontext == "Tim Cook"){
questionss1.remove("Who is the actual CEO at Apple?");
getfirstquestion();
}
if (thequestion.equals("Who is the actual CEO at Microsoft?") amp;amp; buttontext == "Steve Ballmer"){
questionss1.remove("Who is the actual CEO at Microsoft?");
getfirstquestion();
}
if (thequestion.equals("Who is the actual CEO at Google?") amp;amp; buttontext == "Eric Schmidt"){
questionss1.remove("Who is the actual CEO at Google?");
getfirstquestion();
}
return 0;
}
public void getfirstquestion(){
//create the buttons
Button button1 = (Button)findViewById(R.id.button1);
Button button2 = (Button)findViewById(R.id.button2);
Button button3 = (Button)findViewById(R.id.button3);
Button button4 = (Button)findViewById(R.id.button4);
thequestion = questionss1.get(rgenerator.nextInt(questionss1.size()));
TextView question = (TextView)findViewById(R.id.textView1);
question.setText(thequestion);
questionss1.remove(thequestion);
if (thequestion.equals("Who is the actual CEO at Apple?")){
List<String> questions1res = new ArrayList<String>();
questions1res.add("Eric Schmidt");
questions1res.add("Steven Sinofsky");
questions1res.add("Tim Cook");
questions1res.add("Steve Ballmer");
button1.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button1.getText());
button2.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button2.getText());
button3.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button3.getText());
button4.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button4.getText());
}
if (thequestion.equals("Who is the actual CEO at Microsoft?")){
List<String> questions1res = new ArrayList<String>();
questions1res.add("Eric Schmidt");
questions1res.add("Steven Sinofsky");
questions1res.add("Tim Cook");
questions1res.add("Steve Ballmer");
button1.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button1.getText());
button2.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button2.getText());
button3.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button3.getText());
button4.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button4.getText());
}
if (thequestion.equals("Who is the actual CEO at Google?")){
List<String> questions1res = new ArrayList<String>();
questions1res.add("Eric Schmidt");
questions1res.add("Steven Sinofsky");
questions1res.add("Tim Cook");
questions1res.add("Steve Ballmer");
button1.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button1.getText());
button2.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button2.getText());
button3.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button3.getText());
button4.setText(questions1res.get(rgenerator.nextInt(questions1res.size())));
questions1res.remove(button4.getText());
}
}
}
Ответ №1:
В методе checkanswer
вы должны использовать equals
метод, а не ==
оператор, поскольку он сравнивает ссылки, а не содержимое объекта. т. е. вместо buttontext == "Tim Cook"
него должно быть buttontext.equals("Tim Cook")
etc.
Кроме того, еще раз взглянув на свой код, вы должны добавить break;
инструкции в коммутатор:
switch (v.getId()){
case R.id.button1:
Button button1 = (Button)findViewById(R.id.button1);
checkanswer((String) button1.getText());
break;
case R.id.button2:
Button button2 = (Button)findViewById(R.id.button2);
checkanswer((String) button2.getText());
break;
case R.id.button3:
Button button3 = (Button)findViewById(R.id.button2);
checkanswer((String) button3.getText());
break;
case R.id.button4:
Button button4 = (Button)findViewById(R.id.button2);
checkanswer((String) button4.getText());
break;
}
Комментарии:
1. теперь это сработало, но остановилось после первого вопроса. (кнопки просто не отвечают)
2. поскольку я скопировал некоторые коды, я забыл изменить номер кнопок (например, на кнопке 3 был номер 2) и так далее. Тем не менее, ваш код отлично сработал, спасибо!
Ответ №2:
button1.setOnClickListener(это);
Этот код используется для установки OnClickListener на кнопку. Вам нужно создать экземпляр OnClickListener в вашем классе и использовать его. Передача (this) будет передана в действие. Нажатие кнопки в этом случае ничего не даст.
Что-то вроде этого:
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do your checking here
}
};
Попробуйте, дайте мне знать, как это работает.
Комментарии:
1. Он использует действие в качестве OnClickListener, и это нормально.
2. @user1015311 — если это решило вашу проблему, отлично. Я просто хочу, чтобы вы знали, что, хотя я предпочитаю метод Pheonixblade9, который чище, чем использование Activity в качестве слушателя, использование Activity в качестве слушателя также допустимо и используется большинством людей.
3. @MByD Я даже не знал, что вы можете использовать activity в качестве OnClickListener! Ха-ха. Но мне кажется, что гораздо лучше иметь выделенных слушателей для каждой кнопки, если она не превышает 4. В противном случае я бы предложил OnTouchListener измерить точку, к которой он прикоснулся 🙂
4. @Pheonixblade9 — Ну, я согласен, что слушатель не должен быть Активностью в качестве стиля кодирования, но я думаю, что использование одного слушателя и соответствующих списков — гораздо лучший подход, чем слушатель для каждой кнопки.
5. @MByD Лично я бы создал один прослушиватель и установил для него все кнопки. Затем проверьте правильный ответ 🙂