java - 测验应用程序 - 循环问题

标签 java android

好的,所以我最近才在这个寒假期间开始使用 Eclipse 进行 Android 应用程序开发,所以如果这是一个非常简单的问题,请原谅我。

到目前为止,我有一个应用程序,它会提出一个问题(我在程序中创建问题),然后用户键入答案并点击提交,非常简单。我的问题是,如何让应用程序进入下一个问题?这是我到目前为止所拥有的:

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;    
}

好的,所以我有一个 LinkLinkedListChampions .java 文件等等。我的问题是,当我尝试循环(被注释掉的 while 循环)时,它只会破坏应用程序,当我模拟它时没有任何显示。但我不知道如何将下一个问题放到页面上。我是否必须为每个问题创建一个屏幕?我是否必须一遍又一遍地写下每个问题?任何帮助表示赞赏。对不起,如果我不是很清楚。 (还有代码,即使在我编写代码的时候,我也确实是一个 pac 老鼠,我不喜欢删除代码,直到我确定我不需要它)。

最佳答案

您的 while 循环很可能阻塞了 UI 线程。这将导致您的应用无法响应并挂起/强制关闭/崩溃。

您需要重构您的代码以不使用阻塞 while 循环。

尝试简单地显示问题,然后根据用户给出答案的事件采取行动(我不知道这是否涉及单击按钮或在框中输入文本或数字)。如果答案正确,则获取下一个问题并显示。

您想让您的应用程序更加事件驱动,不要四处等待答案。

我认为这篇文章可能有一些有用的花絮:http://developer.android.com/guide/practices/design/responsiveness.html

关于java - 测验应用程序 - 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663096/

相关文章:

java - 发送带有附件的电子邮件,发送一个空白文件

Android TextView 没有正确包装它的文本

java - 微软API的问题

android - 由于 minSdkVersion 正在努力让 Android 构建工作

android - Android Studio 默认代码样式方案遵循哪种格式?

android - 在android中设计布局有哪些不同的方法?

java - 在 H2 数据库中找不到函数 "TO_DATE"

java - 使用 Groovy 作为脚本语言

java - 带有 Dynomite 的自定义 spring-session 存储库 Redis

java - 理解java中实现Runnable的线程