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)
в Б.