Страница 1 из 4

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

Добавлено: 03 ноя 2011, 03:00
damager82
В этом уроке:

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

Click here to read this article!

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

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

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

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

Добавлено: 18 сен 2012, 19:02
rezak90
Fima777 а может хоть расскажите что за ошибка? а то
подчёркивает getIntExtra красным и всё тут
требует телепатических знаний которыми я не обладаю, пока что =)

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

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

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

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

Добавлено: 13 ноя 2012, 19:06
ermek6
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();
	}
}
Видимо я что то упустил,

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

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

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

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

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

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

Добавлено: 30 ноя 2012, 11:07
ophiucus
Всем спасибо:D , проблема решена.

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

android:launchMode="standard"

вместо

android:launchMode="singleTask"

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 10 дек 2012, 22:19
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;

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

Добавлено: 11 дек 2012, 00:50
KamiSempai
rszh писал(а):Здравствуйте, я одно не понял, почему Color.WHITE и Gravity.LEFT а не другие?
Это значения по умолчанию, на случай если getIntExtra ничего не найдет.

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

Добавлено: 01 фев 2013, 02:26
Vici
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)

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

Добавлено: 06 фев 2013, 21:05
gad007
скажите пожалуйста, как сделать чтоб при вызове второго активити и ввода в него данных, результат уходил бы в третье активити, а экран возвращался бы в первое?

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

Добавлено: 06 фев 2013, 22:10
rezak90
gad007 писал(а):скажите пожалуйста, как сделать чтоб при вызове второго активити и ввода в него данных, результат уходил бы в третье активити, а экран возвращался бы в первое?
с ног на голову, если третьей активити не существует то туда не передать, к тому же текущее у вас уже первое, когда стартуете активити тогда и передавайте

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

Добавлено: 06 фев 2013, 22:58
gad007
по уроку вроде все понятно как происходит. а вот если есть три активити то как такое реализовать? и возможно ли? я пока очень новичёк. за тупость извиняюсь.

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

Добавлено: 06 фев 2013, 23:27
rezak90
дело в том что третьего нету, все данные возвращаете со второй активити в первую, при старте третьей активити из первой передаёте нужные данные.