10 개의 질문과 10 개의 카운트 다운 타이머로 구성된 간단한 퀴즈 앱을 만들고 있습니다. 즉, 질문마다 10 개의 활동을 의미합니다. 점수 매기기는 CountDownTimer 메서드에서 각 질문에 올바르게 응답하는 동안 남은 시간을 곱해서 작동합니다. 따라서 score = answer * timeLeft; 그리고 총 점수는 활동 10 후에 활동이 끝날 때 ResultActivity에 인쇄됩니다. 문제는 각 활동을 통해 내 점수 변수를 전달할 수 없으며 활동 10에서 결과 활동까지 의도 한 다음 버튼을 클릭하면 ResultActivity를 열 수 없거나 강제로 닫습니다. ResultActivity에한 액티비티에서 다른 액티비티로 다양한 점수 전달하기
package com.finalproject.logicaltest;
/**
* Created by VICKY on 19-May-17.
*/
import android.app.Activity;
import android.content.Intent;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.Bind;
import static com.finalproject.logicaltest.R.id.rb1;
import static com.finalproject.logicaltest.R.id.rb2;
import static com.finalproject.logicaltest.R.id.rb3;
import static com.finalproject.logicaltest.R.id.rb4;
import static com.finalproject.logicaltest.R.id.rb5;
public class TestActivity10 extends AppCompatActivity {
@Bind(rb1) RadioButton rB1;
@Bind(rb2) RadioButton rB2;
@Bind(rb3) RadioButton rB3;
@Bind(rb4) RadioButton rB4;
@Bind(rb5) RadioButton rB5;
@Bind(R.id.end) Button bEnd;
@Bind(R.id.timer) TextView cDown;
public int answer = 0;
public int score = 0;
public long timeLeft = 0;
//The number of milliseconds in the future from
//the call to start() until the countdown is done
public long millisInFuture = 11000; //11 seconds
//The interval along the way to receive onTick(long) callbacks
long countDownInterval = 1000; //1 second
public long millisUntilFinished;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test10);
ButterKnife.bind(this);
score = getIntent().getExtras().getInt("score");
setTimer();
}
public void setTimer() {
//Initialize a new CountDownTimer instance
final CountDownTimer timer = new CountDownTimer(millisInFuture,countDownInterval){
public void onTick(long millisUntilFinished){
//do something in every tick
//Display the remaining seconds to app interface
//1 second = 1000 milliseconds
cDown.setText("" + millisUntilFinished/1000);
timeLeft = millisUntilFinished/1000;
}
public void onFinish(){
//Do something when count down finished
cDown.setText("NEXT!");
Intent intent = new Intent(TestActivity10.this,ResultActivity.class);
intent.putExtra("score", score);
startActivity(intent);
finish();
timeLeft = 0;
}
}.start();
bEnd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timer.cancel();
timeLeft = millisUntilFinished;
Intent intent = new Intent(TestActivity10.this,ResultActivity.class);
intent.putExtra("score", score);
startActivity(intent);
finish();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
});
}
public void onRadioButtonClicked (View v) {
boolean checked = ((RadioButton) v).isChecked();
switch (v.getId()) {
case rb1:
if (checked){
answer = 0;
break;
}
case rb2:
if (checked){
answer++;
break;
}
case rb3:
if (checked){
answer = 0;
break;
}
case rb4:
if (checked){
answer = 0;
break;
}
case rb5:
if (checked){
answer = 0;
break;
}
}
score += ((int)(timeLeft) * Integer.valueOf(answer));
}
}
그리고 인쇄 된 총 점수 :
그것은이 같은 TestActivity10 때까지 TestActivity2을 통해 putExtra로 점수를 통과
package com.finalproject.logicaltest;
import android.content.Intent;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.TextView;
import java.util.Timer;
import butterknife.ButterKnife;
import butterknife.Bind;
import static android.R.id.message;
import static android.R.string.cancel;
import static com.finalproject.logicaltest.R.id.rb1;
import static com.finalproject.logicaltest.R.id.rb2;
import static com.finalproject.logicaltest.R.id.rb3;
import static com.finalproject.logicaltest.R.id.rb4;
public class TestActivity1 extends AppCompatActivity {
@Bind(R.id.rb1) RadioButton rB1;
@Bind(R.id.rb2) RadioButton rB2;
@Bind(R.id.rb3) RadioButton rB3;
@Bind(R.id.rb4) RadioButton rB4;
@Bind(R.id.next) Button bNext;
@Bind(R.id.timer) TextView cDown;
public int answer = 0;
public int score = 0;
public long timeLeft = 0;
//The number of milliseconds in the future from
//the call to start() until the countdown is done
public long millisInFuture = 11000; //11 seconds
//The interval along the way to receive onTick(long) callbacks
long countDownInterval = 1000; //1 second
public long millisUntilFinished;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test1);
ButterKnife.bind(this);
setTimer();
}
public void setTimer() {
//Initialize a new CountDownTimer instance
final CountDownTimer timer = new CountDownTimer(millisInFuture,countDownInterval){
public void onTick(long millisUntilFinished){
//do something in every tick
//Display the remaining seconds to app interface
//1 second = 1000 milliseconds
cDown.setText("" + millisUntilFinished/1000);
timeLeft = millisUntilFinished/1000;
}
public void onFinish(){
//Do something when count down finished
cDown.setText("NEXT!");
Intent intent = new Intent(TestActivity1.this,TestActivity2.class);
intent.putExtra("score", score);
startActivity(intent);
finish();
timeLeft = 0;
}
}.start();
bNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timer.cancel();
timeLeft = millisUntilFinished;
Intent intent = new Intent(TestActivity1.this,TestActivity2.class);
intent.putExtra("score", score);
startActivity(intent);
finish();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
});
}
public void onRadioButtonClicked (View v) {
boolean checked = ((RadioButton) v).isChecked();
switch (v.getId()) {
case rb1:
if (checked){
answer++;
break;
}
case rb2:
if (checked){
answer = 0;
break;
}
case rb3:
if (checked){
answer = 0;
break;
}
case rb4:
if (checked){
answer = 0;
break;
}
}
score = ((int)(timeLeft) * Integer.valueOf(answer));
}
}
TestActivity1 :
package com.finalproject.logicaltest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import static android.R.id.message;
public class ResultActivity extends AppCompatActivity {
public int score = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
score = getIntent().getExtras().getInt("score");
TextView result = (TextView) findViewById(R.id.total_score);
result.setText(score);
}
}
여기 내 코드입니다 내 코드에 무슨 문제가 있습니까?
결과의 값을 공유 환경 설정에 저장할 수 있으며 항상 결과를 전달하는 대신 결과 화면에 표시 할 수 있습니다. – Anmol
각 질문마다 활동을 작성하는 이유는 무엇입니까? 단편을 사용하고 질문을 할 때마다 여러 번 다시 사용해야합니다. – Sac
'나는 각 질문마다 10 초 카운트 다운 타이머가있는 10 개의 질문으로 구성된 간단한 퀴즈 앱을 만들고 있는데, 이것은 질문에 대한 10 가지 활동을 의미합니다. 이것은 잘못된 방식으로 문제를 해결하려고하는 것처럼 보입니다. 각 질문에 대해 새로운 활동을 작성하는 대신 질문을 한 다음 그 질문을 표시하는 일반 활동을 하나만 가질 수 있다고 생각합니다. 현재 10 가지 활동은 모두 기본적으로 서로 복제되어 있습니다.그것들을 유지하는 것은 시간이 갈수록 훨씬 더 어려워 질 것입니다. – nbokmans