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();