2011-12-29 2 views
3

Итак, я только недавно попал в эту разработку приложений для Android, используя Eclipse для удовольствия над этим зимним перерывом, поэтому простите меня, если это очень простой вопрос.Quiz app - зацикливание на вопросы

У меня есть приложение, в котором задается вопрос (я создаю вопросы в программе), и пользователь набирает ответ и обращается в submit, довольно просто. Моя проблема в том, как заставить приложение перейти к следующему вопросу? Вот то, что я до сих пор:

package first.project; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
//import java.util.Random; 

public class FirstProjectActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Champion ahri = new Champion(0, "Ahri", "I am a Mage", false); 
    Champion akali = new Champion(1, "Akali", "Ninja stuff", true); 
    Champion alistar = new Champion(2, "Alistar", "I am a cow", false); 
    final LinkedList champions = new LinkedList(); 
    champions.insert(ahri); 
    champions.insert(akali); 
    champions.insert(alistar); 
    question = (TextView) findViewById(R.id.question); 
    txtname = (EditText) findViewById(R.id.txt_name); 
    blah = (Button) findViewById(R.id.btn_clickme); 
    quit = (Button) findViewById(R.id.quit); 
    quit.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
    Champion tmp; 
    //Random randomGenerator = new Random(); 
    //int randomNumber = randomGenerator.nextInt(2); 
    //tmp = champions.find(randomNumber); 
    /*while (tmp.hasBeenCalled) { 
     randomNumber = randomGenerator.nextInt(2); 
     tmp = champions.find(randomNumber); 
    }*/ 
    /*tmp.hasBeenCalled = true; 
    while (tmp.name == null) { 
     Toast.makeText(getBaseContext(), "You have completed the quiz!", Toast.LENGTH_SHORT); 
     blah.setOnClickListener(new View.OnClickListener() {    
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getBaseContext(), "You have completed the quiz!", Toast.LENGTH_SHORT); 
      } 
     }); 
    }*/ 
    tmp = champions.getFirst(); 
    // while (tmp.name != null); { 
     question.setText(tmp.says); 
     final Champion temp = tmp; 
     blah.setOnClickListener(new View.OnClickListener() {    
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       String str1 = txtname.getText().toString(); 
       if (champions.isCorrect(temp.name, str1)) { 
        Toast.makeText(getBaseContext(), getString(R.string.correct), Toast.LENGTH_SHORT).show(); 
       } 
       else 
        Toast.makeText(getBaseContext(), getString(R.string.incorrect), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     //tmp.hasBeenCalled = true; 
     tmp = champions.getNext(); 
     //question.setText(tmp.says); 
    // } 

} 

private EditText txtname; 
private Button blah; 
private Button quit; 
private TextView question;  
} 

Итак, у меня есть Link и LinkedList и Champions .java файл и все, что. Моя проблема в том, что когда я пытаюсь выполнить цикл (цикл while, который закомментирован), он просто нарушает приложение, при его симуляции ничего не появляется. Но я не знаю, как еще получить следующий вопрос на странице. Должен ли я создавать экран для каждого вопроса? Должен ли я писать каждый вопрос снова и снова? Любая помощь приветствуется. Извините, если я не очень ясен. (и код, я действительно являюсь pac-крысой, даже когда я код, я не люблю удалять код, пока я точно не знаю, что мне это не понадобится).

+0

у DonT у положить все вопросы в базе данных и нагрузки, один за другим? –

+0

Я на самом деле просто смотрел на этом сайте и видел, как кто-то это делает. Я вообще об этом не думал. Это просто научить приложение Java, поэтому я попробую это. – LiverpoolFTW

ответ

1

Ваши петли while скорее всего блокируют поток пользовательского интерфейса. Это приведет к тому, что ваше приложение не ответит и не повредит/не закроет/не сработает.

Вам нужно будет реорганизовать ваш код, чтобы не использовать блокировку while.

Попробуйте просто отобразить вопрос, а затем действовать в случае, если пользователь дал ответ (я не знаю, будет ли это включать нажатие кнопки или ввод текста или цифр в поле). Если ответ верный, получите следующий вопрос и отобразите его.

Вы хотите, чтобы ваше приложение управлялось событиями, не ждите ответа на цикл.

Я думаю, что эта статья может иметь некоторые полезные лакомые: http://developer.android.com/guide/practices/design/responsiveness.html

+0

Спасибо, Это был первый способ, которым я думал об этом, просто ставя каждый вопрос один за другим. Причина, по которой я пытался сделать это с помощью циклов, состоит в том, что я могу расширить до более вопросов, причем 50 вопросов по-настоящему не заставляют меня писать каждый из них один за другим. – LiverpoolFTW

Смежные вопросы