Ошибка при передаче данных между дочерним действием и родительским действием - PullRequest
0 голосов
/ 17 июня 2019

Я занимаюсь разработкой многофункционального табло, где каждое упражнение позволяет пользователю вести счет по различным видам спорта.В настоящее время существует два вида деятельности.Основным видом деятельности является поддержка подсчета очков для баскетбола, в то время как деятельность для детей поддерживает ведение счета для футбола.Каждое действие имеет кнопку, которая позволяет пользователю переключаться между двумя видами спорта.Я хочу отправить данные из родительской активности (баскетбол) в детскую активность (футбол), когда пользователь переходит к дочерней активности и отображает эти данные на экране детской активности.Когда пользователь возвращается к родительскому действию, я хочу отправить те же данные обратно в родительское действие.Я использовал методы 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.

1 Ответ

0 голосов
/ 17 июня 2019

В вашем дочернем упражнении используйте это, чтобы вернуться к родительскому занятию

Intent data = new Intent();
data.putExtra("bundleName", yourBundle);
setResult(RESULT_OK, data);
finish();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...