【问题标题】:Code not working代码不起作用
【发布时间】:2011-11-01 18:10:29
【问题描述】:

我的应用程序有一个问题列表。当调用 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?") && buttontext == "Tim Cook"){
        questionss1.remove("Who is the actual CEO at Apple?");
        getfirstquestion();
    }

    if (thequestion.equals("Who is the actual CEO at Microsoft?") && buttontext  == "Steve Ballmer"){
        questionss1.remove("Who is the actual CEO at Microsoft?");
        getfirstquestion();
    }

    if (thequestion.equals("Who is the actual CEO at Google?") && 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());
    }
}
    }

【问题讨论】:

    标签: android string button arraylist


    【解决方案1】:

    checkanswer 方法中,您应该使用equals 方法,而不是== 运算符,因为它比较引用而不是对象的内容。即应该是 buttontext.equals("Tim Cook") 等,而不是 buttontext == "Tim Cook"

    另外,再次查看您的代码,您应该在 switch 中添加 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;
    }
    

    【讨论】:

    • 现在可以了,但是在第一个问题之后就停止了。(按钮只是没有响应)
    • 因为我复制了一些代码,我忘记更改按钮的编号(例如,按钮 3 上的编号为 2)等等。但是,您的代码运行良好,谢谢!
    【解决方案2】:

    button1.setOnClickListener(this);

    此代码用于将 OnClickListener 设置为按钮。您需要在您的类中实例化一个 OnClickListener 并使用它。传入(this)将传入activity。在这种情况下,单击按钮不会执行任何操作。

    类似这样的:

    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // do your checking here
        }
    };
    

    试试看,告诉我它是如何工作的。

    【讨论】:

    • 他把activity作为OnClickListener,这样就OK了。
    • @user1015311 - 如果它解决了您的问题,那就太好了。我只是想让你知道,虽然我更喜欢Pheonixblade9的方法,它比使用Activity作为监听器更干净,但使用Activity作为监听器也是有效的,并且被大多数人使用。
    • @MByD 我什至不知道您可以将活动用作 OnClickListener!哈哈。但是,为每个按钮设置专门的侦听器似乎更好,只要它不超过 4。否则我建议使用 OnTouchListener 测量他触摸的点:)
    • @Pheonixblade9 - 我同意监听器不应该是 Activity 作为一种编码风格,但我认为使用一个监听器和适当的列表比监听每个按钮要好得多。
    • @MByD 就个人而言,我会创建一个侦听器并将所有按钮设置为它。然后检查正确的答案:)
    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 2012-04-27
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多