我是一个noobie在Android Studio中进行测验,我试图在活动之间传递一个整数来增加他们在最后得到的问题数量,但是在第二个活动中它没有改变当我回答第一个问题是正确的。
Question1 activity:
public class Question1 extends AppCompatActivity {
public int correctAnswers = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_question1);
Intent intent = new Intent(Question1.this, Question2.class);
Intent i = getIntent();
Intent answersCorrect = new Intent(Question1.this, Question2.class);
answersCorrect.putExtra("correctAnswers", correctAnswers);
}
public void submitQuestion1(View view) {
EditText question1TextInput = (EditText) findViewById(R.id.question1TextInput);
if (question1TextInput.getText().toString().length() >= 1) {
startActivity(new Intent(Question1.this, Question2.class));
if (question1TextInput.getText().toString().toUpperCase().contentEquals("FATHER")) {
correctAnswers += 1;
Intent answersCorrect = new Intent(Question1.this, Question2.class);
answersCorrect.putExtra("correctAnswers", correctAnswers);
}
}
}
}
问题2活动:
public class Question2 extends AppCompatActivity {
public int correctAnswers;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_question2);
Intent intent = getIntent();
int number = intent.getIntExtra("correctAnswers", 0);
TextView myAwesomeTextView = (TextView)findViewById(R.id.text);
myAwesomeTextView.setText(String.valueOf(number));
}
}
答案 0 :(得分:0)
将意图移至字段。你只需要一次。
然后,问题是您太快启动其他活动,而没有设置任何值。您使用空的新Intent
启动了其他活动public class Question1 extends AppCompatActivity {
public int correctAnswers = 0;
final Intent answersIntent = new Intent(Question1.this, Question2.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_question1);
}
public void submitQuestion1(View view) {
EditText question1TextInput = (EditText) findViewById(R.id.question1TextInput);
String answer = question1TextInput.getText().toString();
// No need to check for length if directly checking another string
if (answer.toUpperCase().contentEquals("FATHER")) {
answersIntent.putExtra("correctAnswers", ++correctAnswers);
startActivity(answersIntent);
}
}
如果您计划在许多问题上分享该值,请尝试使用SharedPreferences。
FWIW,为具有问题文本和可能答案字段的任何问题制作通用视图。尽量不要为每个问题制作一个活动。
答案 1 :(得分:0)
你在这里重复你的意图:
Intent intent = new Intent(Question1.this, Question2.class);
Intent i = getIntent();
Intent answersCorrect = new Intent(Question1.this, Question2.class);
answersCorrect.putExtra("correctAnswers", correctAnswers);
将其替换为:
Intent intent = new Intent(Question1.this, Question2.class);
intent.putExtra("correctAnswers", correctAnswers);
startActivity(intent);
在你的第二个活动中:
int correctAnswers;
correctAnswers = (int) getIntent().getIntExtra("correctAnswers", 0);
答案 2 :(得分:0)
所以基本上,当你有一个活动并想要开第二个活动时,Intent
是最重要的事情。它负责您的系统和应用程序之间的通信。
Intent负责启动活动,启动服务和发送广播。
请注意,有两种不同类型的意图:显式和隐式。
显式意图以这种方式使用: 您有Activity_1,并且您知道要从Act_1开始Acticity_2。
当您不知道要启动的活动的名称时,将使用隐式意图。
现在,我知道您可能了解StartActivity()方法的用途,但StartActivity总是需要进入括号的意图。 StartActivity(Activity_2);
无效。
所以,当使用Explicit Intent时:
Intent i = new Intent(Activity_1.this, Activity_2.class);
StartActivity(i);
您首先要创建一个引用 - i - 并且在参数内部,第一个是您从中调用第二个活动的活动,第二个是您要调用的活动。
以下是关于Intents的视频:https://youtu.be/FH1Ym1KjJNc
希望这会有所帮助。