Android Используйте startActivityForResult из вложенного действия на вкладке. - PullRequest
2 голосов
/ 29 июля 2011

Я пишу приложение, состоящее из нескольких вкладок, созданных на вкладке с:

intent = new Intent().setClass(this, Home.class);
    spec = tabHost.newTabSpec("Home").setIndicator("Home",
                      res.getDrawable(R.drawable.home))
                  .setContent(intent);
    tabHost.addTab(spec);

В рассматриваемой вкладке я использую ActivityGroup для перехода к другим действиям на вкладке:

Intent intent = new Intent(Info1.this, Enroll2.class);
            intent.putExtra("info", Info);

            View newView = Group.group.getLocalActivityManager().startActivity("Info1", intent
                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
                    .getDecorView();  
            Group.group.replaceView(newView);

Из одного из этих занятий мне нужно сделать снимок, и я пытаюсь использовать приложение камеры по умолчанию на устройстве, используя:

//define the file-name to save photo taken by Camera activity
    String fileName = "picture" + Integer.toString(pictureCount);

    //create parameters for Intent with filename
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, fileName);
    values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");

    //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)
    imageUri = getContentResolver().insert(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

    //create new Intent
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

Это правильно запускает приложение камеры, но после съемки оно не входит в метод onActivityResult. Я попытался поместить этот метод в каждый класс в цепочке для вкладки, и он не вводит код ни в один из них.

Я заметил, что этот вопрос был задан ранее на Как начать работу с результатом в дочернем элементе TabHost , но единственным потенциально полезным ответом было перенаправление на Как вернуть результат (startActivityForResult) из TabHost Упражнение? , которое представляет собой вопрос об использовании startActivityForResult из базового Activity для запуска tabActivity, а не при запуске Activity из tabActivity, так что оно бесполезно.

Я также продолжаю видеть, как люди говорят, что это не работает, когда вы используете ActivityGroup, но никто не предлагает, как еще это сделать.

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 01 августа 2011

Хорошо, я смог найти решение этой проблемы.

Сначала я создал другое действие, которое я начал использовать с помощью базового вызова startActivity (), который я назвал Result Controller. Это не передает данные обратно на вкладку, что означает, что вам не нужно беспокоиться о том, куда они идут.

Во-вторых, я создал простой класс статических данных, который я назвал DataConnector. ResultController получит экземпляр DataConnector и вставит туда данные

Затем в исходном упражнении (на вкладках) я реализовал метод onWindowFocusChanged, чтобы определить, когда пользователь вернулся к нему. Я получил экземпляр DataConnector и смог вытащить необходимые данные оттуда.

...