无法理解意图如何工作

时间:2018-04-12 02:55:54

标签: java android android-intent

我是一个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));

    }
}

3 个答案:

答案 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

希望这会有所帮助。