Android: Действия не передают дополнения друг другу

Я пытаюсь передать некоторые строки из A в B и B в A, но по какой-то причине это не работает. Вот что я пытаюсь сделать:

В A у меня есть две глобальные переменные: minuteValue а также hourValueи по умолчанию они равны 00. Они обновляются, когда я передаю некоторые строки из B, с такими же именами, но разными значениями, в A. Независимо от того, происходит ли обмен, я передаю эти значения из A в B.

В B я передаю эти значения, только если пользователь нажимает кнопку: timerButton и это делается в setUpTimerButton метод

Кажется, я никогда не захожу в onActivityResult метод в A, так как у меня есть операторы печати, и я никогда не вижу ни одного из них.

Код для А:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            if (resultCode == RESULT_OK) {

                if(requestCode == 3){
                //the values for the timer
                String hourValue = data.getStringExtra("hourValue");
                String minuteValue = data.getStringExtra("minuteValue");

                //find the values from the timer if the user had set it earlier
                if (hourValue != null) { this.hourValue = hourValue;
                    System.out.println("HOUR IS " + hourValue ); }
                if (minuteValue != null) { this.minuteValue = minuteValue;
                    System.out.println("minute IS " + minuteValue); }
                else{
                    System.out.println("timer minute value is NULL");
                }
            }
    }

...
//going from A to B
Intent timerActivity = new Intent(MainActivity.this, CustomTimer.class);
                            timerActivity.putExtra("minuteValue", minuteValue);
                            System.out.println("passing back");
                            timerActivity.putExtra("hourValue", hourValue);
                            System.out.println("passing back hour");

                    startActivityForResult(timerActivity, 3);

Код для B:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_custom_timer);

    hourValue = (EditText) findViewById(R.id.hour_value);
    minuteValue = (EditText) findViewById(R.id.minute_value);
    timerButton = (Button) findViewById(R.id.start_timer_button);

    //grabs the values from A 
    if(getIntent().getStringExtra("hourValue") != null)
        hourValue.setText(getIntent().getStringExtra("hourValue"));
    if(getIntent().getStringExtra("minuteValue") != null)
        minuteValue.setText(getIntent().getStringExtra("minuteValue"));
    else{
        System.out.println("could not find values");//this never occurs
    }

    setUpHourValue();
    setUpMinuteValue();
    setUpTimerButton();
}

private void setUpTimerButton(){

    timerButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            //startTime = SystemClock.uptimeMillis();
           // handler.postDelayed(updateTimerThread, 0);

            System.out.println("TIMER CLICKED************");
            //send the list of audio titles back to the main activity
            Intent intent = getIntent();
            System.out.println("**** hour and minute values are: " +
                hourValue.getText().toString() + " : " + minuteValue.getText().toString());

            intent.putExtra("hourValue", hourValue.getText().toString());
            intent.putExtra("minuteValue", minuteValue.getText().toString());
            setResult(RESULT_OK, intent);
            finish();//go back to the previous page
        }
    });
}

private void setUpHourValue(){

    hourValue.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            hourValue.setText(v.getText().toString());
            return false;
        }
    });
}

private void setUpMinuteValue(){

    minuteValue.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            minuteValue.setText(v.getText().toString());
            return false;
        }
    });
}

Я знаю, что timerButton работает, так как я распечатываю значения при нажатии кнопки, но я никогда не вхожу в onActivityResult по какой-то причине, и я думаю, что это реальная проблема...

2 ответа

Решение

startActivityForResult вместо startActivity при переходе от A к B. Вы можете использовать этот конструктор и использовать requestCode если у вас есть другие переходы от А до некоторых других экранов, а также

public void startActivityForResult(Intent intent, int requestCode)
startActivity(timerActivity);

Эта строка кода является виновником здесь.
Вы должны использовать это:

startActivityForResult(Intent intent, int requestCode);

Чтобы иметь возможность использовать setResult(int result) в Б.

Другие вопросы по тегам