-1

我有一个单选按钮活动,有 5 个游戏选项。这是一个问答游戏,所以用户可以选择玩直到他或她犯一个错误、两个错误、树形、四个和五个错误。我的问题是....进行 5 个活动和 5 个类是否更好,所以当用户检查该单选按钮时,我可以调用每个活动的意图,或者,最好针对所有五个选择进行一项活动,具体取决于什么用户选择,数到 1、2、3、4 或 5 个错误?我知道第一个选项怎么做,但我不知道第二个怎么做。这是我的选择活动:

public class Izbor extends Activity implements OnClickListener, OnCheckedChangeListener{

    MediaPlayer buttonBack;
    RadioButton rbDeset,rbDvadeset,rbNeogranicenoTriGreske,rbNeogranicenoJednaGreska,rbNeogranicenoPetGresaka;
    Button dNazad, dStart;
    RadioGroup rGrupa;
    TextView tv1;

    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.izbor);
        addListenerOnButton();
    }

    private void addListenerOnButton() {

        Typeface dugmad = Typeface.createFromAsset(getAssets(), "Bebas.ttf");
        Typeface pitanjeVrh = Typeface.createFromAsset(getAssets(), "Lobster.ttf");


        rbDeset = (RadioButton) findViewById(R.id.radio1);
        rbDvadeset = (RadioButton) findViewById(R.id.radio2);
        rbNeogranicenoJednaGreska = (RadioButton) findViewById(R.id.radio3);
        rbNeogranicenoTriGreske = (RadioButton) findViewById(R.id.radio4);
        rbNeogranicenoPetGresaka = (RadioButton) findViewById(R.id.radio5);
        dNazad = (Button) findViewById(R.id.bNazad);
        dStart = (Button) findViewById(R.id.bStart);
        rGrupa = (RadioGroup) findViewById(R.id.radioGroup1);
        buttonBack = MediaPlayer.create(Izbor.this, R.raw.back);
        tv1 = (TextView) findViewById(R.id.tv1);

        dNazad.setTypeface(dugmad);
        dStart.setTypeface(dugmad);
        rbDeset.setTypeface(dugmad);
        rbDvadeset.setTypeface(dugmad);
        rbNeogranicenoPetGresaka.setTypeface(dugmad);
        rbNeogranicenoJednaGreska.setTypeface(dugmad);
        rbNeogranicenoTriGreske.setTypeface(dugmad);
        tv1.setTypeface(pitanjeVrh);


        rGrupa.setOnCheckedChangeListener(this);
        rbDeset.setOnClickListener(this);
        rbDvadeset.setOnClickListener(this);
        rbNeogranicenoJednaGreska.setOnClickListener(this);
        rbNeogranicenoTriGreske.setOnClickListener(this);
        rbNeogranicenoPetGresaka.setOnClickListener(this);
        dStart.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                if(rbDeset.isChecked()){
                    startActivity(new Intent("rs.androidaplikacijekvizopstekulture.KVIZ"));
                }else if(rbDvadeset.isChecked()){
                    startActivity(new Intent("rs.androidaplikacijekvizopstekulture.DVADESETPITANJA"));  
                    }else if(rbNeogranicenoJednaGreska.isChecked()){
                        startActivity(new Intent("rs.androidaplikacijekvizopstekulture.TRIDESETPITANJA"));
                    }else if(rbNeogranicenoPetGresaka.isChecked()){
                        startActivity(new Intent("rs.androidaplikacijekvizopstekulture.NEOGRANICENOPETGRESAKA"));

                }

            }
        });


        dNazad.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                buttonBack.start();
                finish();

            }
        });
    }

    public void onCheckedChanged(RadioGroup group, int checkedId) {
        }

    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
}

这是一个用户可以玩到 5 个错误的活动:

public class NeogranicenoPetGresaka extends Activity implements OnClickListener{

    Button bIzlazIzKviza, bOdgovor1, bOdgovor2, bOdgovor3, bOdgovor4;
    TextView question, netacniOdg, score;
    int counter = 0;
    int brojacPogresnihOdgovora = 0;
    int brojacTacnihOdgovora = 0;

    Runnable mLaunchTask = new Runnable() {
        public void run() {
            nextQuestion();
        }
     };
    Runnable mLaunchTaskFinish = new Runnable() {
         public void run() {
            finish();
         }
      };


    private class Answer {
        public Answer(String opt, boolean correct) {
            option = opt;
            isCorrect = correct;
        }

        String option;
        boolean isCorrect;
    }
    Handler mHandler = new Handler();

    final OnClickListener clickListener = new OnClickListener() {
        public void onClick(View v) {

            Answer ans = (Answer) v.getTag();
            if (ans.isCorrect) {
                brojacTacnihOdgovora++;
                Intent i = new Intent("rs.androidaplikacijekvizopstekulture.TACANODGOVOR");
                startActivity(i);
                mHandler.postDelayed(mLaunchTask,1200);
            }
        else{
            brojacPogresnihOdgovora++;
            Intent i = new Intent("rs.androidaplikacijekvizopstekulture.POGRESANODGOVOR");
            startActivity(i);
            mHandler.postDelayed(mLaunchTask,2200);
            }
        }
    };


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.neograniceno5gresaka);

        Typeface dugmad = Typeface.createFromAsset(getAssets(), "Bebas.ttf");
        Typeface pitanje = Typeface.createFromAsset(getAssets(), "Lobster.ttf");
        bIzlazIzKviza = (Button) findViewById(R.id.bIzlazIzKvizaN);
        netacniOdg = (TextView) findViewById(R.id.tvBrojPitanjaN);
        question = (TextView) findViewById(R.id.tvPitanjeN);
        bOdgovor1 = (Button) findViewById(R.id.bOdgovorN1);
        bOdgovor2 = (Button) findViewById(R.id.bOdgovorN2);
        bOdgovor3 = (Button) findViewById(R.id.bOdgovorN3);
        bOdgovor4 = (Button) findViewById(R.id.bOdgovorN4);
        score = (TextView) findViewById(R.id.tvSkor2N);
        bOdgovor1.setTypeface(dugmad);
        bOdgovor2.setTypeface(dugmad);
        bOdgovor3.setTypeface(dugmad);
        bOdgovor4.setTypeface(dugmad);
        bIzlazIzKviza.setTypeface(dugmad);
        netacniOdg.setTypeface(dugmad);
        question.setTypeface(pitanje);
        score.setTypeface(dugmad);

        nextQuestion(); //startuje prvo pitanje!

    }

        public void onClick(View v) {
        // TODO Auto-generated method stub


    }

        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
        }

    public void nextQuestion() {

        TestAdapter mDbHelper = new TestAdapter(this);
        mDbHelper.createDatabase();

        try{    //Pokusava da otvori db

            mDbHelper.open();  //baza otvorena

            Cursor c = mDbHelper.getTestData();

            List<Answer> labels = new ArrayList<Answer>();

            labels.add(new Answer(c.getString(2), true));
            labels.add(new Answer(c.getString(3), false));
            labels.add(new Answer(c.getString(4), false));
            labels.add(new Answer(c.getString(5), false));

            Collections.shuffle(labels);

            if(brojacPogresnihOdgovora < 5){


        question.setText(c.getString(1));

        bOdgovor1.setText(labels.get(0).option);
        bOdgovor1.setTag(labels.get(0));
        bOdgovor1.setOnClickListener(clickListener);

        bOdgovor2.setText(labels.get(1).option);
        bOdgovor2.setTag(labels.get(1));
        bOdgovor2.setOnClickListener(clickListener);

        bOdgovor3.setText(labels.get(2).option);
        bOdgovor3.setTag(labels.get(2));
        bOdgovor3.setOnClickListener(clickListener);

        bOdgovor4.setText(labels.get(3).option);
        bOdgovor4.setTag(labels.get(3));
        bOdgovor4.setOnClickListener(clickListener);
        //reset your next question and all four options here
        netacniOdg.setText("" + brojacPogresnihOdgovora);
        score.setText("Score: " + brojacTacnihOdgovora);
            }
            else{
                Intent i = new Intent("rs.androidaplikacijekvizopstekulture.REZULTAT");
                startActivity(i);
                mHandler.postDelayed(mLaunchTaskFinish,4000);
            }
        }
        finally{    // kada zavrsi sa koriscenjem baze podataka, zatvara db
            mDbHelper.close();
        }

    bIzlazIzKviza.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            finish();   
        }
    });
    }
}
4

2 回答 2

1

考虑到选择只是同一个游戏的一个小设置,我认为绝对没有理由为每个选择创建一个类/活动,这将是纯粹的疯狂。

至于设置部分,只需创建一个仅接受任意数量“错误”的数字输入字段(为什么不呢?)。OnClick 从此字段中获取输入,将值保存到意图附加项中,然后以意图开始游戏。在游戏的 onCreate 中读取 Intent Extras 并获取“尝试”/“错误”的数量。

于 2013-03-02T23:19:12.703 回答
0

好的,我尝试使用 onNewIntent,但我只能调用一个方法,而且我至少需要 3 个。这是我的选择活动中带有单选按钮(组)的代码:

public void onClick(View v) {
                if(rbDeset.isChecked()){
                    Intent intent = new Intent(Izbor.this, Kviz.class);
                    intent.putExtra("myMethod", "nextQuestion");
                    startActivity(intent);

这是我的测验活动:

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if(intent.getStringExtra("methodName").equals("nextQuestion")){
              nextQuestion();
        }

              }

我尝试使用 ELSE IF 但它没有用。我的方法被命名为:nextQuestion()、nextQuestion2() 和 nextQuestion3()。这些方法几乎相同,只是计数器不同(10 个问题一个,20 个问题一个,30 个问题一个)。也许我不需要 3 种方法来做到这一点,但老实说,我不知道其他方法可以做到这一点。

于 2013-03-03T16:39:29.340 回答