2012-01-14 47 views
1

我正在尝试创建一个测验测验。在问题表单中,我制作了3个按钮,当用户点击答案时。它重新启动相同的布局和Java类,所以它出现下一个问题。那么这种方式不太好,因为一次又一次地调用相同的布局是很痛苦的。那么,如何更改代码,以便在同一个布局中更改问题20次?我尝试while函数,但它不工作,因为它不等待按下按钮继续下一个问题(如果有一个命令等待用户做出一个动作来继续while循环,它将工作)。这里是我的代码:我怎样才能让一个循环等待一个动作先在android中继续?

package dv.qtest.dvyzual; 

import java.util.Random; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class startGame extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.startgame); 
     final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.correct); 

     AnyDBAdapter eventsData = new AnyDBAdapter(getBaseContext()); 
     eventsData.open(); 
     myMenu.question = myMenu.question +1; 
     String qq = getRandomNumber(); 
     Cursor c = eventsData.ExampleSelect(qq); 
     this.startManagingCursor(c); 
     eventsData.close();   final String h = c.getString(5);  setQuestions(c); 

     final Button r1 = (Button)findViewById(R.id.b1); 
     r1.setOnClickListener (new View.OnClickListener() {    public void onClick(View v) { 
       if ("1".equals(h)) { 
        r1.setBackgroundResource(R.drawable.buttonneocorrect); 
        myMenu.score = myMenu.score + 1; 
        mp2.start(); 
       } 
       else { 
        r1.setBackgroundResource(R.drawable.buttonneowrong); 
       } 
       finish(); 
       if (myMenu.question == 20) { 
      startActivity(new Intent("dv.qtest.dvyzual.QuizTestActivity.ENDQUIZGAME"));} 
       else { 
       startActivity(new Intent("dv.qtest.dvyzual.QuizTestActivity.STARTQUIZGAME")); 
       } 
          }  });   final Button r2 = (Button)findViewById(R.id.b2); 
     r2.setOnClickListener (new View.OnClickListener() {    public void onClick(View v) { 
       if ("2".equals(h)) { 
        r2.setBackgroundResource(R.drawable.buttonneocorrect); 
        myMenu.score = myMenu.score + 1; 
       } 
       else { 
        r2.setBackgroundResource(R.drawable.buttonneowrong); 
       } 
       finish(); 
       if (myMenu.question == 20) {startActivity(new Intent("dv.qtest.dvyzual.QuizTestActivity.ENDQUIZGAME"));} 
       else {startActivity(new Intent("dv.qtest.dvyzual.QuizTestActivity.STARTQUIZGAME"));}   }  }); 
       final Button r3 = (Button)findViewById(R.id.b3); 
     r3.setOnClickListener (new View.OnClickListener() {    public void onClick(View v) { 
       if ("3".equals(h)) { 
        r3.setBackgroundResource(R.drawable.buttonneocorrect); 
        myMenu.score = myMenu.score + 1; 
        mp2.start(); 
       } 
       else { 
        r3.setBackgroundResource(R.drawable.buttonneowrong); 
       } 
       finish(); 
       if (myMenu.question == 20) {startActivity(new Intent("dv.qtest.dvyzual.QuizTestActivity.ENDQUIZGAME"));} 
       else {startActivity(new Intent("dv.qtest.dvyzual.QuizTestActivity.STARTQUIZGAME"));}   }  }); 
     } 

    private String getRandomNumber(){ 

     Random generator = new Random(); 
     int n = 49; 
     n = generator.nextInt(n) +1; 
     String n1 = ""+n; 
     return n1; 
    } 

    private void setQuestions(Cursor c) { 
       TextView rscore = (TextView)findViewById(R.id.q1);  rscore.setText("Score: " + myMenu.score + "    Question: " 
+ myMenu.question); 

     TextView r0 = (TextView)findViewById(R.id.textView1);  r0.setText(c.getString(1)); 
       Button r1 = (Button)findViewById(R.id.b1);  r1.setText(c.getString(2)); 
       Button r2 = (Button)findViewById(R.id.b2);  r2.setText(c.getString(3)); 
       Button r3 = (Button)findViewById(R.id.b3);  r3.setText(c.getString(4)); 
      }  } 
+0

你熟悉面向对象编程及其与程序编程的区别? – Joe 2012-01-14 22:57:55

+0

嗯,说实话,因为我是这门语言的新手,我不太熟悉,也许我在编码时会犯一些大错。你看到很多我必须解决的错误吗? – NeoXRated 2012-01-14 23:04:23

+0

对不起,我还没有花时间看看你的代码,我只是认识到我在开始使用java编写代码(这是我的第一个面向对象的编程语言)之前的思维方式。你的代码可能没问题,但它对于理解编码和解决OOP问题的方法很重要。你不要以任何方式在android中冻结你的代码(实际上,如果它的话,os会杀死你的应用程序),它需要继续下去。 – Joe 2012-01-14 23:14:41

回答

1

那么我不会回应你的答案......因为你错误地启动了Android开发。

你必须去学习OOP的一些概念...阅读顺序:

http://www.osnews.com/story/6788

http://docs.oracle.com/javase/tutorial/java/concepts/

而且这也有一个良好的代码实现:

http://source.android.com/source/code-style.html

然后...看看android样本,有很好的样本,t哎在:

%AndroidSDK%/样本/

而且,你必须了解Android的架构和运行Android:

Android system architecture

enter image description here

+1

其他事情要考虑到:Android是一个事件驱动的体系结构。 OOP(甚至Java)不一定需要事件驱动模型,因此研究事件驱动的编程及其概念也可能是有利的。 – 2012-01-15 04:47:11

+0

@Fuzzi:好点! NeoX:要清楚,它不是邪恶的。但是如果你继续这样,你将会失去时间。按照Android视图的教程: http://developer.android.com/resources/tutorials/views/index.html – Bourbon 2012-01-15 13:33:24