Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Получение результата из Activity
В прошлой теме было рассмотрено как вызывать новую Activity и передавать ей некоторые данные. Но мы можем не только передавать данные запускаемой activity, но и ожидать от нее некоторого результата работы. К примеру, пусть у нас в проекте будут две activity: MainActivity и SecondActivity. А для каждой activity есть свой файл интерфейса: activity_main.xml и activity_second.xml. В прошлой теме мы вызывали новую activity с помощью метода startActivity(). Для получения же результата работы запускаемой activity необходимо использовать метод startActivityForResult(Intent intent, int requestCode). Этот метод принимает два параметра: Intent передает в запускаемую activity данные, а второй параметр requestCode указывает на целочисленный код запроса. Рассмотрим его использование на примере. Так, определим в файле activity_main.xml следующий интерфейс: <? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: id=" @+id/activity_main" android: layout_width=" match_parent" android: layout_height=" match_parent" android: padding=" 16dp" android: orientation=" vertical" > < TextView android: id=" @+id/textView" android: layout_width=" match_parent" android: layout_height=" wrap_content" android: text=" Укажите возраст" android: textSize=" 22dp" /> < EditText android: id=" @+id/ageBox" android: inputType=" number" android: layout_width=" match_parent" android: layout_height=" wrap_content" /> < Button android: id=" @+id/navButton" android: layout_width=" wrap_content" android: layout_height=" wrap_content" android: text=" Отправить" android: onClick=" onClick" />
< /LinearLayout> Для ввода данных здесь определен элемент EditText, а для отправки - кнопка. Определим в классе MainActivity запуск второй activity: import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
static final String AGE_KEY = " AGE"; static final String ACCESS_MESSAGE=" ACCESS_MESSAGE"; private static final int REQUEST_ACCESS_TYPE=1;
TextView textView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView); } public void onClick(View view) {
// получаем введенный возраст EditText ageBox = (EditText) findViewById(R.id.ageBox); String age = ageBox.getText().toString();
Intent intent = new Intent(this, SecondActivity.class); intent.putExtra(AGE_KEY, age); startActivityForResult(intent, REQUEST_ACCESS_TYPE); }
@Override public void onActivityResult(int requestCode, int resultCode, Intent data){ if(requestCode==REQUEST_ACCESS_TYPE){ if(resultCode==RESULT_OK){ String accessMessage = data.getStringExtra(ACCESS_MESSAGE); textView.setText(accessMessage); } else{ textView.setText(" Ошибка доступа" ); } } else{ super.onActivityResult(requestCode, resultCode, data); } } } В обработчике нажатия кнопки onClick() получаем введенный в текстовое поле возраст, добавляем его в объект Intent с ключем AGE_KEY и запускаем SecondActivity с помощью метода startActivityForResult. Причем числовой код запроса представляет константу REQUEST_ACCESS_TYPE. Здесь не столь важно, какое число передавать в качестве результата, но используя это число, мы потом можем выполнить обработку полученного ответа от SecondActivity, особенно если в разных ситуациях применяется несколько числовых кодов запроса. Для получения и обработки результата, полученного от SecondActivity, необходимо переопределить метод onActivityResult. Этот метод принимает три параметра:
В данном случае в методе onActivityResult() выводятся полученные данные в элемент TextView. Далее перейдем к SecondActivity и определим в файле activity_second.xml набор кнопок: <? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: id=" @+id/activity_second" android: layout_width=" match_parent" android: layout_height=" match_parent" android: orientation=" vertical" android: padding=" 16dp" > < TextView android: id=" @+id/ageView" android: textSize=" 22sp" android: layout_width=" match_parent" android: layout_height=" wrap_content" /> < Button android: id=" @+id/button1" android: text=" Открыть доступ" android: layout_width=" match_parent" android: layout_height=" wrap_content" android: onClick=" onButton1Click" /> < Button android: id=" @+id/button2" android: text=" Отклонить доступ" android: layout_width=" match_parent" android: layout_height=" wrap_content" android: onClick=" onButton2Click" /> < Button android: id=" @+id/button3" android: text=" Возраст недействителен" android: layout_width=" match_parent" android: layout_height=" wrap_content" android: onClick=" onButton3Click" /> < Button android: id=" @+id/cancel" android: text=" Отмена" android: layout_width=" match_parent" android: layout_height=" wrap_content" android: onClick=" onCancelClick" /> < /LinearLayout> А в классе SecondActivity определим обработчики для этих кнопок: import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second);
Bundle extras = getIntent().getExtras(); if (extras! = null) { TextView ageView = (TextView) findViewById(R.id.ageView); String age = extras.getString(MainActivity.AGE_KEY); ageView.setText(" Возраст: " + age); } } public void onCancelClick(View v) { setResult(RESULT_CANCELED); finish(); } public void onButton1Click(View v) { sendMessage(" Доступ разрешен" ); } public void onButton2Click(View v) { sendMessage(" Доступ запрещен" ); } public void onButton3Click(View v) { sendMessage(" Недопустимый возраст" ); } private void sendMessage(String message){
Intent data = new Intent(); data.putExtra(MainActivity.ACCESS_MESSAGE, message); setResult(RESULT_OK, data); finish(); } } Три кнопки вызывают метод sendMessage(), в который передают отправляемый ответ. Это и будет то сообщение, которое получить MainActivity в методе onActivityResult. Для возврата результата необходимо вызвать метод setResult(), в который передается два параметра:
После вызова метода setResult() нужно вызвать метод finish, который уничтожит текущую activity. Одна кнопка вызывает обработчик onCancelClick(), в котором передается в setResult только код результата - RESULT_CANCELED. То есть условно говоря, мы получаем в SecondActivity введенный в MainActivity возраст и с помощью нажатия определенной кнопки возвращаем некоторый результат в виде сообщения. В зависимости от нажатой кнопки на SecondActivity мы будем получать разные результаты в MainActivity: |
Последнее изменение этой страницы: 2019-05-04; Просмотров: 308; Нарушение авторского права страницы