Главная страница
Навигация по странице:

  • Использование Намерений для запуска Активностей.

  • Request code

  • моб разраб. Лабораторные работы с 1 по 21. Лабораторная работа Использование значений строк и цветов


    Скачать 5.49 Mb.
    НазваниеЛабораторная работа Использование значений строк и цветов
    Анкормоб разраб
    Дата05.03.2022
    Размер5.49 Mb.
    Формат файлаdocx
    Имя файлаЛабораторные работы с 1 по 21.docx
    ТипЛабораторная работа
    #383909
    страница14 из 20
    1   ...   10   11   12   13   14   15   16   17   ...   20

    Намерения в Android


    Намерения (Intent) в Android используются в качестве механизма передачи сообщений, который может работать как внутри одного приложения, так и между приложениями. Намерения могут применяться для:

      • объявления о желании (необходимости) вашего приложения запуска какой-то Активности или Сервиса для выполнения определенных действий.

      • Извещения о том, что произошло какое-то событие.

      • Явного запуска указанного Сервиса или Активности.


    Последний вариант является наиболее часто используемым.

    Использование Намерений для запуска Активностей.

    Чтобы запустить нужную Активность, вызывается метод startActivity(someIntent).

    В конструкторе Намерения можно явно указать класс Активности, которую требуется

    запустить, или действие, которое нужно выполнить. Во втором случае система автоматически подберет нужную Активность, используя механизм, называемый Определением Намерений (Intent Resolution). Метод startActivity находит запускает Активность, наиболее подходящую вашему Намерению.

    По окончании работы запущенной таким образом Активности запустившая ее Активность не получает никаких извещений о результатах обработки Намерения. Если требуется получать результаты, используется метод startActivityForResult.

    Для явного указания того, какую Активность (конкретный класс в приложении) требуется запустить, создаются Намерения с помощью указания параметров следующих конструктора: текущий Контекст приложения и класс Активности для запуска.
    Intent intent = new Intent(MyActivity.this, MyOtherActivity.class); startActivity(intent);

    Возвращение результатов работы Активности

    Активность, запущенная с помощью метода startActivity, полностью независима от запустившей ее Активности и, соответственно, завершает свою работу, никому об этом не сообщая. В то же время, вы можете запускать Активности, «связанные» со своим

    «породителем». Такой способ отлично подходит для ситуаций, когда «дочерняя» Активность должна обработать ввод пользовательских данных и предоставить результаты обработки «родительской» Активности. Запускаемые таким образом (с помощью метода startActivityForResult) Активности должны быть «зарегистрированы» в Манифесте приложения.

    В отличие от метода startActivity, метод startActivityForResult требует явного указания еще одного параметра – кода запроса (request code). Этот параметр используется вызывающей Активностью для определения того, какая именно дочерняя Активность завершила работу и (возможно) предоставила результаты:
    private static final int BUY_BEER = 1;
    Intent intent = new Intent(this, MyOtherActivity.class); startActivityForResult(intent, BUY_BEER);

    Возвращение результатов работы

    Когда дочерняя Активность готова к завершению работы, до вызова метода finish

    требуется вызвать метод setResult для передачи результатов вызывающей Активности.

    Метод setResult получает два параметра: код возврата и сам результат, представленный в виде Намерения.

    Код возврата (result code), возвращаемый из дочерней Активности – это, обычно, либо Activity.RESULT_OK, либо Activity.RESULT_CANCELED. В случае, если дочерняя Активность завершит работу без вызова метода setResult, код возврата, переданный родительской Активности, будет равен Activity.RESULT_CANCELED.

    В некоторых случаях может потребоваться использовать собственные коды возврата для обработки определенных ситуаций. Метод setResult в качестве кода возврата воспринимает любое целочисленное значение.

    Намерение, возвращаемое как результат, часто содержит URI, указывающий на конкретный объект данных, и/или набор дополнительных значений, записанных в свойство Намерения extras, использующихся для передачи дополнительной информации.

    Пример указания обработчика нажатия на кнопку button, устанавливающего результат работы и завершающего текущую Активность:
    Button button = (Button) findViewById(R.id.ok_button); button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) { Intent result = new Intent();

    result.putExtra("teacher name", "Mike Varakin");
    setResult(RESULT_OK, result); finish();

    }

    });

    Обработка результатов дочерней Активности

    Когда дочерняя Активность завершает работу, в родительской Активности вызывается обработчик onActivityResult, который получает следующие параметры:

      • Request code. Использованный при запуске дочерней активности кодзапроса.

      • Result code. Код возврата.

      • Data. Намерение, используемое для упаковки возвращаемых данных.


    Пример обработчика onActivityResult:
    private static final int SELECT_VICTIM= 1;

    private static final int DRINK_BEER= 2;
    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {

    case (SELECT_VICTIM): {

    if (resultCode == Activity.RESULT_OK) {

    String selectedVictim = data.getStringExtra("victim");

    }

    break;

    }
    case (DRINK_BEER): {

    if (resultCode == Activity.RESULT_OK) {

    // Обработать результаты заказанного действия

    }

    break;

    }

    }

    }


    1   ...   10   11   12   13   14   15   16   17   ...   20


    написать администратору сайта