Урок 30. Подробнее про onActivityResult. Зачем нужны requestCode и resultCode

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 30. Подробнее про onActivityResult. Зачем нужны requestCode и resultCode

Сообщение damager82 » 03 ноя 2011, 03:00

В этом уроке:

- разбираемся, зачем нужны requestCode и resultCode в onActivityResult

Click here to read this article!
Последний раз редактировалось damager82 29 апр 2017, 19:02, всего редактировалось 5 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Fima777
Сообщения: 30
Зарегистрирован: 14 сен 2012, 13:39

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Fima777 » 18 сен 2012, 18:11

хочу добавить кнопку "размер", всё сделал , но почему то в MainActivity выдаёт ошибку при такой записи:
case REQUEST_CODE_SIZE:
int size = data.getIntExtra("size", TextSize.LARGEST);
tvText.setTextSize(size);
break;

подчёркивает getIntExtra красным и всё тут , хотел так же прописать размер текста цифрами , но не тут то было
разясните чайнику как быть .
спасибо

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение rezak90 » 18 сен 2012, 19:02

Fima777 а может хоть расскажите что за ошибка? а то
подчёркивает getIntExtra красным и всё тут
требует телепатических знаний которыми я не обладаю, пока что =)
R.id.team
Политика на форуме запрещена

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение damager82 » 19 сен 2012, 16:49

Fima777 писал(а):хочу добавить кнопку "размер", всё сделал , но почему то в MainActivity выдаёт ошибку при такой записи:
case REQUEST_CODE_SIZE:
int size = data.getIntExtra("size", TextSize.LARGEST);
tvText.setTextSize(size);
break;

подчёркивает getIntExtra красным и всё тут , хотел так же прописать размер текста цифрами , но не тут то было
разясните чайнику как быть .
спасибо
Напишите какого типа объекты data и TextSize.LARGEST. Скорей всего пытаетесь передать в метод параметры, которые он принимать не умеет
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

ermek6
Сообщения: 4
Зарегистрирован: 28 май 2012, 00:37

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение ermek6 » 13 ноя 2012, 19:06

Fima777 писал(а):хочу добавить кнопку "размер", всё сделал , но почему то в MainActivity выдаёт ошибку при такой записи:
case REQUEST_CODE_SIZE:
int size = data.getIntExtra("size", TextSize.LARGEST);
tvText.setTextSize(size);
break;

подчёркивает getIntExtra красным и всё тут , хотел так же прописать размер текста цифрами , но не тут то было
разясните чайнику как быть .
спасибо
У меня аналогичная проблема:
Главный Activity

Код: Выделить всё

package kz.ranter.teaching.p0301;
import kz.ranter.teaching.R;
import kz.ranter.teaching.Starter;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class P0301_ActivityResult extends Activity implements OnClickListener{
	TextView tvText;
	Button btnColor, btnAlign;
	final int REQUEST_CODE_COLOR=1, REQUEST_CODE_ALIGN=2;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.p0301_activity_result);
		
		tvText		= (TextView)findViewById(R.id.tvText);
		btnColor	= (Button)findViewById(R.id.btnColor);
		btnAlign	= (Button)findViewById(R.id.btnAlign);
		
		btnColor.setOnClickListener(this);
		btnAlign.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch(v.getId()){
		case R.id.btnColor:
			Intent i = new Intent(this, ColorActivity.class);
			startActivityForResult(i, REQUEST_CODE_COLOR);
			
		}}
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		if(resultCode == RESULT_OK){
			switch(requestCode){
			case REQUEST_CODE_COLOR:
				Log.d(Starter.TAG,"Обработка установки текста");
				//int color = data.getIntExtra("color",Color.WHITE);
				//tvText.setTextColor(color);
				break;
			}}}}
По <Ctrl+Shift+I> выдает data=null
Выбор цвета:

Код: Выделить всё

package kz.ranter.teaching.p0301;
import kz.ranter.teaching.R;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ColorActivity extends Activity implements OnClickListener{
	Button btnRed, btnGreen, btnBlue;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.color);
		
		btnRed		= (Button)findViewById(R.id.btnRed);
		btnGreen	= (Button)findViewById(R.id.btnGreen);
		btnBlue		= (Button)findViewById(R.id.btnBlue);
		
		btnRed.setOnClickListener(this);
		btnGreen.setOnClickListener(this);
		btnBlue.setOnClickListener(this);
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Intent intent = new Intent();
		
		switch(v.getId()){
		case R.id.btnRed:
			intent.putExtra("color", Color.RED);
			break;
		case R.id.btnGreen:
			intent.putExtra("color", Color.GREEN);
			break;
		case R.id.btnBlue:
			intent.putExtra("color", Color.BLUE);
			break;
		}
		setResult(RESULT_OK);
		finish();
	}
}
Видимо я что то упустил,

ermek6
Сообщения: 4
Зарегистрирован: 28 май 2012, 00:37

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение ermek6 » 13 ноя 2012, 19:17

Вопрос снят :)
Вот до чего копипаст доводит :)
setResult оказывается перегруженный метод. с двумя формами:
setResult(int) и setResult(int, Intent)
Звиняйте за длинный пост :)

ophiucus
Сообщения: 5
Зарегистрирован: 29 ноя 2012, 17:20

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение ophiucus » 29 ноя 2012, 17:34

Народ помогите, либо лыжи не едут либо я ...... :shock:
суть проблемы: делаю свой проект и наткнулся на странную вещь onActivityResult вызывается сразу после startActivityForResult еще до закрытия дочерней активити и после закрытия дочерней активити больше не вызывается, соответственно никаких результатов от дочерней активити я не получаю. Думал намудрил что-то в своем коде, зашел сюда, взял этот урок, создал новый проект запускаю и ..., после нажатия кнопки Color или Alignment всплывает тоаст Wrong result, хотя я еще никаких кнопок на дочерней активити не нажимал и соответственно после нажатия и закрытия дочерней активити ни цвет ни выравнивание ни изменяются, та же история что и у меня в проекте onActivityResult вызывается сразу после startActivityForResult. Что интересно такое и на планшете и на эмуляторе.

Что это может быть и как от этого лечится?

ophiucus
Сообщения: 5
Зарегистрирован: 29 ноя 2012, 17:20

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение ophiucus » 30 ноя 2012, 11:07

Всем спасибо:D , проблема решена.

В файле манифеста нужно изменить режим запуска активити на

android:launchMode="standard"

вместо

android:launchMode="singleTask"

источник: http://stackoverflow.com/questions/6539 ... second-act

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение AndreyI » 30 ноя 2012, 12:27

Я кстати, так и подумал, что что-то с этим связано, но обычно такой проблемы ни у кого не возникает т.к. по умолчанию android:launchMode всегда "standard", если кто-то его поставил "singleTask" значит знал что делал :)

ophiucus
Сообщения: 5
Зарегистрирован: 29 ноя 2012, 17:20

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение ophiucus » 30 ноя 2012, 12:32

У меня оно почему-то ставится по умолчанию, я даже когда создал новый проект по этому примеру, там тоже стало по умолчанию "singleTask", поэтому пример и не работал, может это где-то в настройках эклипса выставляется?

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение AndreyI » 30 ноя 2012, 14:19

Вообще-то все шаблоны находятся в папке \android-sdk\tools\templates из них и строится все при создании новых проектов и компонентов приложения.
У меня в шаблонах манифеста нет указаний для android:launchMode и этот атрибут никак не определен.

ophiucus
Сообщения: 5
Зарегистрирован: 29 ноя 2012, 17:20

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение ophiucus » 05 дек 2012, 11:26

И снова я :(
опять проблема с данным методом, вчера весь день писал проект, проверял все на эмуляторе, все прекрасно работало, вечером решил скинуть на планшет и при закрытии дочернего активити стала вылетать ошибка, методом исключений нашел что вылетает именно при вызове finish().
На эмуляторе все работает, не пойму как такое может быть и как теперь отловить что за ошибка, так как в логах эмулятора все красиво, а планшет ничего кроме стандартной фразы о неожиданной остановке не выдаёт :(.

ophiucus
Сообщения: 5
Зарегистрирован: 29 ноя 2012, 17:20

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение ophiucus » 05 дек 2012, 15:54

Проблема решилась при помощи данного метода: http://androidmarket.ru/?page_id=6383
проблема была в закрытом курсоре, но все равно не понятно почему эта ошибка не проявлялась на эмуляторе :evil:

rszh
Сообщения: 1
Зарегистрирован: 06 дек 2012, 19:28

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение rszh » 10 дек 2012, 22:19

Здравствуйте, я одно не понял, почему Color.WHITE и Gravity.LEFT а не другие?

Код: Выделить всё

   switch (requestCode) {
	      case REQUEST_CODE_COLOR:
	        int color = data.getIntExtra("color", Color.WHITE);
	        tvText.setTextColor(color);
	        break;
	      case REQUEST_CODE_ALIGN:
	        int align = data.getIntExtra("alignment", Gravity.LEFT);
	        tvText.setGravity(align);
	        break;

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение KamiSempai » 11 дек 2012, 00:50

rszh писал(а):Здравствуйте, я одно не понял, почему Color.WHITE и Gravity.LEFT а не другие?
Это значения по умолчанию, на случай если getIntExtra ничего не найдет.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Vici
Сообщения: 12
Зарегистрирован: 06 ноя 2012, 00:29

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Vici » 01 фев 2013, 02:26

rszh писал(а):Здравствуйте, я одно не понял, почему Color.WHITE и Gravity.LEFT а не другие?

Код: Выделить всё

   switch (requestCode) {
	      case REQUEST_CODE_COLOR:
	        int color = data.getIntExtra("color", Color.WHITE);
	        tvText.setTextColor(color);
	        break;
	      case REQUEST_CODE_ALIGN:
	        int align = data.getIntExtra("alignment", Gravity.LEFT);
	        tvText.setGravity(align);
	        break;
public int getIntExtra (String name, int defaultValue)

gad007
Сообщения: 10
Зарегистрирован: 06 фев 2013, 20:47

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение gad007 » 06 фев 2013, 21:05

скажите пожалуйста, как сделать чтоб при вызове второго активити и ввода в него данных, результат уходил бы в третье активити, а экран возвращался бы в первое?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение rezak90 » 06 фев 2013, 22:10

gad007 писал(а):скажите пожалуйста, как сделать чтоб при вызове второго активити и ввода в него данных, результат уходил бы в третье активити, а экран возвращался бы в первое?
с ног на голову, если третьей активити не существует то туда не передать, к тому же текущее у вас уже первое, когда стартуете активити тогда и передавайте
R.id.team
Политика на форуме запрещена

gad007
Сообщения: 10
Зарегистрирован: 06 фев 2013, 20:47

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение gad007 » 06 фев 2013, 22:58

по уроку вроде все понятно как происходит. а вот если есть три активити то как такое реализовать? и возможно ли? я пока очень новичёк. за тупость извиняюсь.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение rezak90 » 06 фев 2013, 23:27

дело в том что третьего нету, все данные возвращаете со второй активити в первую, при старте третьей активити из первой передаёте нужные данные.
R.id.team
Политика на форуме запрещена

Ответить