0

I'm new to android. I'm trying to make a quiz app which has categories (history, sports...).

There is only one table with 60 questions in database. First 10 question are from category one(history) and 10 to 20 from category second(sports) and so on. I want that on click of First category only first 10 questions will be fetched and on click on second category only 10 to 20 questions will be fetched. Can we solve this problem passing some value through intent in onclick() and use that value in if else for bounding the questions?

QuestionActivity.java

public class QuestionActivity extends Activity {
List<Question> quesList;
int score = 0;
Random r = new Random();
int qid= (r.nextInt(60) + 0);

Question currentQ;
TextView txtQuestion, times, scored;
Button button1, button2, button3;
CounterClass timer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    QuizHelper db = new QuizHelper(this);  // my question bank class
    quesList = db.getAllQuestions();  // this will fetch all quetonall  
    questions
    currentQ = quesList.get(qid); // the current question

    txtQuestion = (TextView) findViewById(R.id.txtQuestion);
    // the textview in which the question will be displayed

    // the three buttons,
    // the idea is to set the text of three buttons with the options from 
    question bank
    button1 = (Button) findViewById(R.id.button1);
    button2 = (Button) findViewById(R.id.button2);
    button3 = (Button) findViewById(R.id.button3);

    // the textview in which score will be displayed
    scored = (TextView) findViewById(R.id.score);

    // the timer
    times = (TextView) findViewById(R.id.timers);


    // method which will set the things up for our game
    setQuestionView();
    times.setText("00:00:30");

    // A timer of 30 seconds to play for, with an interval of 1 second 
    (1000 milliseconds)
    timer = new CounterClass(30000, 1000);
    timer.start();

    // button click listeners
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            // passing the button text to other method
            // to check whether the anser is correct or not
            // same for all three buttons
            getAnswer(button1.getText().toString());
        }
    });

    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getAnswer(button2.getText().toString());
        }
    });

    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getAnswer(button3.getText().toString());
        }
    });
}

public void getAnswer(String AnswerString) {
    if (currentQ.getANSWER().equals(AnswerString)) {

        // if conditions matches increase the int (score) by 1
        // and set the text of the score view
        score++;
        scored.setText("Score : "+ score);

    }
    else {

        // if unlucky start activity and finish the game
     timer.cancel();
        Intent intent = new Intent(QuestionActivity.this,
                ResultActivity.class);
        // passing the int value
        Bundle b = new Bundle();
        b.putInt("score", score); // Your score
        intent.putExtras(b); // Put your score to your next
        startActivity(intent);
        finish();
    }

     if (qid < 60) {

        // if questions are not over then do this
        currentQ = quesList.get(qid);
        setQuestionView();
    } else {
        // if over do this
         timer.cancel();
        Intent intent = new Intent(QuestionActivity.this,
                ResultActivity.class);
        Bundle b = new Bundle();
        b.putInt("score", score); // Your score
        intent.putExtras(b); // Put your score to your next
        startActivity(intent);
        finish();
    }


}


@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
public class CounterClass extends CountDownTimer {

    public CounterClass(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onFinish() {
        times.setText("Time is up");
        Intent intent = new Intent(QuestionActivity.this,
                ResultActivity.class);
        timer.cancel();
        Bundle b = new Bundle();
        b.putInt("score", score); // Your score
        intent.putExtras(b); // Put your score to your next
        startActivity(intent);
        finish();

    }

    @Override
    public void onTick(long millisUntilFinished) {
        // TODO Auto-generated method stub

        long millis = millisUntilFinished;
        String hms = String.format(
                "%02d:%02d:%02d",
                TimeUnit.MILLISECONDS.toHours(millis),
                TimeUnit.MILLISECONDS.toMinutes(millis)
                        - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS
                        .toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis)
                        - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS
                        .toMinutes(millis)));
        System.out.println(hms);
        times.setText(hms);
    }


}

private void setQuestionView() {

    // the method which will put all things together
    txtQuestion.setText(currentQ.getQUESTION());
    button1.setText(currentQ.getOPTA());
    button2.setText(currentQ.getOPTB());
    button3.setText(currentQ.getOPTC());
    qid= (r.nextInt(60) + 0);

   }


   }

Home.java

public class Home extends Activity {
Button play,about,help,quit;
ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home);
    play=(Button)findViewById(R.id.play);
    about=(Button)findViewById(R.id.about);
    quit=(Button)findViewById(R.id.quit);
    help=(Button)findViewById(R.id.help);

    play.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent intent=new Intent(getApplicationContext(),QuestionActivity.class);
            startActivity(intent);
            finish();
        }
    });
    quit.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            finish();
        }
    });
    about.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(getApplicationContext(),about.class);
            startActivity(intent);
        }
    });
    help.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(getApplicationContext(),help.class);
            startActivity(intent);
        }
    });

}

}

Micho
  • 3,929
  • 13
  • 37
  • 40
Chaitanya Parashar
  • 692
  • 2
  • 12
  • 21
  • You want to set a int extra to your intent when you start the QuestionActivity based on the button clicked? can you please post the code where you call QuestionActivity? – Jonathan Aste Apr 03 '17 at 20:09
  • java file where i call questionactivity is added. – Chaitanya Parashar Apr 03 '17 at 20:24
  • Possible duplicate of [How do I pass data between Activities in Android application?](http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-in-android-application) – Mohammed Bakr Sikal Apr 06 '17 at 07:43

3 Answers3

0

After you create an Intent object but before you call startActivity(intent); use: intent.putExtra("name",123); When you want to get the integer in the other activity simply use: int foo = getIntent().getIntExtra("name");

Sjoerd Dal
  • 696
  • 4
  • 14
0

In the activity where you calculated that int value and you would like to go to the other Activity:

int magicVariable = 100;
Intent intent = new Intent(this, OtherClassToGo.class);
intent.putExtra("EXTRA_VALUE_KEY", magicVariable);
startActivity(intent);

In the OtherClassToGo's onCreate() method:

Intent intent = getIntent();
int magicVariableFromOtherClass = intent.getIntExtra("EXTRA_VALUE_KEY");

Of course for "EXTRA_VALUE_KEY" you can use a public static variable so it is easier to "remember" it.

Gabe
  • 624
  • 8
  • 19
0

create variable int page and max, use setterPage getterPage page on question activity. and give value max = listquestion.size, and then use set and get value page on your button

Cak Ud
  • 1