Child Activity 和 Parent Activity 之间的数据传输失败
Failure in Data Transmission Between Child Activity and Parent Activity
我正在设计一个 multi-activity 记分牌应用程序,其中每个 activity 允许用户记录各种运动的分数。目前有两个活动。主要 activity 支持篮球记分,而 child activity 支持足球记分。每个 activity 都有一个按钮,允许用户在两种运动之间切换。当用户导航到 child [=36= 时,我想将数据从 parent activity (篮球)发送到 child activity (足球) ] 并在 child activity 的屏幕上显示该数据。当用户导航回 parent activity 时,我想将相同的数据发送回 parent activity。我使用了 startActivityForResult(Intent I, int requestCode) 和 onActivityResult(int requestCode, int resultCode, Intent data) 方法。
我已经 运行 多次测试并确认没有数据从 child activity 传输到 parent activity。我相当确定 Android Studio 环境不会调用 onActivityResult()。我在方法的最顶部放置了一个日志命令,但消息没有显示在 logcat 中。我还尝试了 Build -> Clean Project。我关闭了 re-opened 工作室。我可以确认数据已成功从 parent 方法发送到 child 方法。
这是 jumpSoccer() 方法,它有助于 parent -> child activity 切换。
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 方法,它有助于 child -> parent activity 切换。
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 方法,它应该处理从 child activity.
返回的数据
@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));
}
}
}
我希望 parent activity 显示来自 child activity 的数据,但它没有。由于 logcat.
中缺少上述日志消息,似乎没有触发 onActivityResult()
在您的 child activity 中,使用此 return 至 parent activity
Intent data = new Intent();
data.putExtra("bundleName", yourBundle);
setResult(RESULT_OK, data);
finish();
我正在设计一个 multi-activity 记分牌应用程序,其中每个 activity 允许用户记录各种运动的分数。目前有两个活动。主要 activity 支持篮球记分,而 child activity 支持足球记分。每个 activity 都有一个按钮,允许用户在两种运动之间切换。当用户导航到 child [=36= 时,我想将数据从 parent activity (篮球)发送到 child activity (足球) ] 并在 child activity 的屏幕上显示该数据。当用户导航回 parent activity 时,我想将相同的数据发送回 parent activity。我使用了 startActivityForResult(Intent I, int requestCode) 和 onActivityResult(int requestCode, int resultCode, Intent data) 方法。
我已经 运行 多次测试并确认没有数据从 child activity 传输到 parent activity。我相当确定 Android Studio 环境不会调用 onActivityResult()。我在方法的最顶部放置了一个日志命令,但消息没有显示在 logcat 中。我还尝试了 Build -> Clean Project。我关闭了 re-opened 工作室。我可以确认数据已成功从 parent 方法发送到 child 方法。
这是 jumpSoccer() 方法,它有助于 parent -> child activity 切换。
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 方法,它有助于 child -> parent activity 切换。
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 方法,它应该处理从 child activity.
返回的数据@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));
}
}
}
我希望 parent activity 显示来自 child activity 的数据,但它没有。由于 logcat.
中缺少上述日志消息,似乎没有触发 onActivityResult()在您的 child activity 中,使用此 return 至 parent activity
Intent data = new Intent();
data.putExtra("bundleName", yourBundle);
setResult(RESULT_OK, data);
finish();