簡體   English   中英

如何將按鈕單擊時的 int 值從一個活動傳遞到另一個活動?

[英]How to pass int value on button click from one activity to another?

我是安卓新手。 我正在嘗試制作一個具有類別(歷史,體育......)的測驗應用程序。

數據庫中只有一張表,有60個問題。 前 10 個問題來自第一類(歷史),10 到 20 來自第二類(體育),依此類推。 我希望點擊第一類只會獲取前 10 個問題,點擊第二類只會獲取 10 到 20 個問題。 我們能否解決這個問題,在onclick()通過 Intent 傳遞一些值並在 if else 中使用該值來限制問題?

問題活動.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);

   }


   }

主頁.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);
        }
    });

}

}

在創建 Intent 對象之后但在調用startActivity(intent); 使用: intent.putExtra("name",123); 當您想在其他活動中獲取整數時,只需使用: int foo = getIntent().getIntExtra("name");

在您計算該int值的活動中,您想轉到另一個Activity

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

OtherClassToGoonCreate()方法中:

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

當然,對於"EXTRA_VALUE_KEY"您可以使用公共靜態變量,以便“記住”它更容易。

創建變量 int page 和 max,在問題活動中使用setterPage getterPage頁面。 並給出 value max = listquestion.size ,然后在按鈕上使用 set 和 get value 頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM