Я занимаюсь разработкой многофункционального табло, где каждое упражнение позволяет пользователю вести счет по различным видам спорта.В настоящее время существует два вида деятельности.Основным видом деятельности является поддержка подсчета очков для баскетбола, в то время как деятельность для детей поддерживает ведение счета для футбола.Каждое действие имеет кнопку, которая позволяет пользователю переключаться между двумя видами спорта.Я хочу отправить данные из родительской активности (баскетбол) в детскую активность (футбол), когда пользователь переходит к дочерней активности и отображает эти данные на экране детской активности.Когда пользователь возвращается к родительскому действию, я хочу отправить те же данные обратно в родительское действие.Я использовал методы startActivityForResult (Intent I, int requestCode) и onActivityResult (int requestCode, int resultCode, Intent data).
Я провел несколько тестов и подтвердил, что никакие данные не передаются из дочернего действия в родительское действие.Я уверен, что onActivityResult () не вызывается в среде Android Studio.Я поместил команду log в самый верх метода, и сообщение не отображается в logcat.Я также попробовал Build -> Clean Project.Я закрыл и заново открыл студию.Я могу подтвердить, что данные успешно отправляются из родительского метода в дочерний метод.
Вот метод jumpSoccer (), который облегчает переключение активности родителя -> ребенка.
public void jumpSoccer(View view) {
/*
TESTING: SEND BASKETBALL DATA TO SOCCER ACTIVITY
*/
//send basketball data
Intent i = new Intent(this, Soccer.class);
Bundle extrasBall = new Bundle();
//team A info
EditText teamA = findViewById(R.id.teamA);
extrasBall.putString(EXTRA_TEAMA, teamA.getText().toString());
TextView scoreA = findViewById(R.id.scoreA);
extrasBall.putString(EXTRA_SCOREA, scoreA.getText().toString());
//team B info
EditText teamB = findViewById(R.id.teamB);
extrasBall.putString(EXTRA_TEAMB, teamB.getText().toString());
TextView scoreB = findViewById(R.id.scoreB);
extrasBall.putString(EXTRA_SCOREB, scoreB.getText().toString());
//add basketball bundle
i.putExtras(extrasBall);
//soccer bundle is global variable; initialized as null and given value in onActivityResult()
//send soccer data back
//if(extrasSoccer != null)
//i.putExtras(extrasSoccer);
startActivityForResult(i, SOCCER_REQUEST);
}
Вот метод jumpBasketball, который облегчает переключение активности ребенка -> родителя.
public void jumpBasketball(View view){
Intent i = new Intent(this, MainActivity.class);
//get bundle sent from basketball activity and add to intent to send back
Bundle extrasBall = this.getIntent().getExtras();
i.putExtras(extrasBall);
startActivity(i);
Примечание: getIntent () вызывается один раз перед этим методом по причинам, не связанным с этой проблемой
Вот метод onActivityResult, который должен обрабатывать данные, возвращаемые дочерним действием.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//receive data and populate stat page (artificial memory) for basketball data and simply hold soccer data until it is returned
Log.d("oAR called", "success!");
super.onActivityResult(requestCode, resultCode, data);
//request code indicates origin of data
if (resultCode == RESULT_OK) {
if (requestCode == SOCCER_REQUEST) {
//get basketball bundle
Bundle extrasBall = data.getExtras();
//repopulate team A info
EditText teamA = findViewById(R.id.teamA);
teamA.setText(extrasBall.getString(EXTRA_TEAMA));
TextView scoreA = findViewById(R.id.scoreA);
scoreA.setText(extrasBall.getString(EXTRA_SCOREA));
//repopulate team B info
EditText teamB = findViewById(R.id.teamB);
teamB.setText(extrasBall.getString(EXTRA_TEAMB));
TextView scoreB = findViewById(R.id.scoreB);
scoreB.setText(extrasBall.getString(EXTRA_SCOREB));
}
}
}
Я ожидаю, что родительская активность отобразит данные дочерней активности, но это не так.Похоже, что onActivityResult () не запускается из-за отсутствия вышеупомянутого сообщения журнала в logcat.