Урок 30. Подробнее про onActivityResult. Зачем нужны requestCode и resultCode
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
большое спасибо.
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Вот и я вчера попался на это, были у меня активности в SingleInstance. Только сегодня понял, что в этом параметре дело.ophiucus писал(а):Народ помогите, либо лыжи не едут либо я ......
суть проблемы: делаю свой проект и наткнулся на странную вещь onActivityResult вызывается сразу после startActivityForResult еще до закрытия дочерней активити и после закрытия дочерней активити больше не вызывается, соответственно никаких результатов от дочерней активити я не получаю. Думал намудрил что-то в своем коде, зашел сюда, взял этот урок, создал новый проект запускаю и ..., после нажатия кнопки Color или Alignment всплывает тоаст Wrong result, хотя я еще никаких кнопок на дочерней активити не нажимал и соответственно после нажатия и закрытия дочерней активити ни цвет ни выравнивание ни изменяются, та же история что и у меня в проекте onActivityResult вызывается сразу после startActivityForResult. Что интересно такое и на планшете и на эмуляторе.
Что это может быть и как от этого лечится?
Теперь думаю, как эмулировать сделать SingleInstance в Standart режиме.
Может кто подскажет решение?
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Про манифест файл забыл написать в уроке
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Что конкретно?Грино писал(а):Про манифест файл забыл написать в уроке
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
может не совсем по уроку...
есть activity Main, из неё вызываю activity ServicePage1 так
в activity ServicePage1 вызываю activity ServicePage2
из activity ServicePage2 нужно вернуться activity Main, и надо передать что-то в неё
как это можно сделать?
есть activity Main, из неё вызываю activity ServicePage1 так
Код: Выделить всё
Intent intent = new Intent(this, ServicePage1.class);
startActivityForResult(intent, 1);
Код: Выделить всё
intent = new Intent(this, ServicePage2.class);
startActivity(intent);
как это можно сделать?
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Тут есть несколько вариантов.assan писал(а):может не совсем по уроку...
есть activity Main, из неё вызываю activity ServicePage1 такв activity ServicePage1 вызываю activity ServicePage2Код: Выделить всё
Intent intent = new Intent(this, ServicePage1.class); startActivityForResult(intent, 1);
из activity ServicePage2 нужно вернуться activity Main, и надо передать что-то в неёКод: Выделить всё
intent = new Intent(this, ServicePage2.class); startActivity(intent);
как это можно сделать?
1) К примеру можно что-то типа у Main в манифесте прописать android:launchMode="singleInstance" и если ее запустить из ServicePage2 типа new Intent(this, Main.class); вызовется не новая а уже существующая, и в интент можно положить какие-нибудь данные. Если к тому же прописать этому интенту что-то типа FLAG_ACTIVITY_CLEAR_TOP то оно заодно удалит из стека ServicePage1 чтоб по back на него не возвращалось.
2) Сделать лесенку - ServicePage2 возвращает в ServicePage1 результат, а ServicePage1 закрывается и пересылает его Main
ну это так, на вскидку, я счас не за компом нет возможности проверить
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
что-то странное. При вызове activity ServicePage1 из Main, происходит сработка в Main onActivityResult, хотя она должна срабатывать при возврате в Main.anber писал(а): 1) К примеру можно что-то типа у Main в манифесте прописать android:launchMode="singleInstance" и если ее запустить из ServicePage2 типа new Intent(this, Main.class); вызовется не новая а уже существующая, и в интент можно положить какие-нибудь данные. Если к тому же прописать этому интенту что-то типа FLAG_ACTIVITY_CLEAR_TOP то оно заодно удалит из стека ServicePage1 чтоб по back на него не возвращалось.
и и соответственно ничего не передается(не возвращается из ServicePage2)
но в savedInstanceState данные сохраненные onSaveInstanceState, остаются, чего не было без android:launchMode="singleInstance" это хорошо, но не достаточно
проверь, у себя, мож я что не так , или так и должно...
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Здравствуйте, у меня такая проблема. Делаю все точно как в уроке, но из 2го активити не возвращяется результат(в setResult результат заносится).
Вот код MainActivity
Вот код SettingsActivity
Вот код MainActivity
Код: Выделить всё
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnLeft = (Button) findViewById(R.id.btnLeft);
btnRight = (Button) findViewById(R.id.btnRight);
}
public boolean onOptionsItemSelected(MenuItem item)//выбранный пункт меню
{
switch(item.getItemId())
{
case R.id.action_settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, REQUEST_CODE_SETTINGS);
break;
}
return super.onOptionsItemSelected(item);
}
public void OnActivityResult(int requestCode, int resultCode, Intent data)
{
String sData;
sData = data.getExtras().toString();
int checkBox = 0;
if(sData == "Left") checkBox=1;
if(sData == "Right") checkBox=2;
if(resultCode == RESULT_OK)
{
switch(requestCode)
{
case REQUEST_CODE_SETTINGS:
{
switch(checkBox)
{
case 1:
btnLeft.setActivated(true);
break;
case 2:
btnRight.setActivated(true);
break;
}
}
break;
}
}
else Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
}
Код: Выделить всё
public class SettingsActivity extends Activity implements OnClickListener {
Button btnApplySettings;
CheckBox cbBtnLeft, cbBtnRight;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
btnApplySettings = (Button) findViewById(R.id.btnApplySettings);
btnApplySettings.setOnClickListener(this);
cbBtnLeft = (CheckBox) findViewById(R.id.cbBtnLeft);
cbBtnRight = (CheckBox) findViewById(R.id.cbBtnRight);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
if (cbBtnLeft.isChecked()) intent.putExtra("CheckBox","Left");
if (cbBtnRight.isChecked()) intent.putExtra("CheckBox","Right");
setResult(RESULT_OK,intent);
finish();
}
}
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
У вас ошибка в MainActivity в 22 строке.
Нужно было написать:И идентичность срок проверяют не с помощью "==" а с помощьб equals.Желательно сделать именно так как я написал, а не sData.equals("Left"), так как sData может быть null.
Нужно было написать:
Код: Выделить всё
sData = data.getStringExtra("CheckBox");
Код: Выделить всё
"Left".equals(sData)
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Все равно не работает, не возвращается результат.Все уже перепробовал.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Что пишет?vozup писал(а):Все равно не работает, не возвращается результат.Все уже перепробовал.
Если бы ничего не возвращало, у вас в 22 строке обращение к null было.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Никакой ошибки не выдает. Просто в MainActivity в OnActivityResult не возвращаться данные, это из логов видно.
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Даже не возвращается в MainActivity.
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
наставь точки остановки и посмотри, что есть в переменных и куда заходитvozup писал(а):Даже не возвращается в MainActivity.
это будет болеенаглядно чем логи
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
OnActivityResult вообще не вызывается
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
OnActivityResult вызывается в onResume MainActivity, но как его вызвать с возвращенными параметрами??
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Чему равен REQUEST_CODE_SETTINGS ?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
REQUEST_CODE_SETTINGS = 1KamiSempai писал(а):Чему равен REQUEST_CODE_SETTINGS ?
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Вот полные коды, может у себя посмотрите:
MainActivity:
SettingsActivity:
BrowserActivity:
main.xml
settings.xml
browser.xml
MainActivity:
Код: Выделить всё
public class MainActivity extends Activity implements OnClickListener {
final int REQUEST_CODE_SETTINGS = 1;
Button btnSiteGo, btnLeft, btnRight;
EditText etSiteName;
String TAG = "States";
TextView tvText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG,"onCreate MainActivity");
etSiteName = (EditText) findViewById(R.id.etSiteName);
btnSiteGo = (Button) findViewById(R.id.btnSiteGo);
btnSiteGo.setOnClickListener(this);
btnLeft = (Button) findViewById(R.id.btnLeft);
btnRight = (Button) findViewById(R.id.btnRight);
tvText = (TextView) findViewById(R.id.tvText);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)//выбраный пункт меню
{
switch(item.getItemId())
{
case R.id.action_settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, REQUEST_CODE_SETTINGS);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://" + etSiteName.getText().toString()));
startActivity(intent);
}
public void OnActivityResult(int requestCode, int resultCode, Intent data)
{
String sData = data.getStringExtra("CheckBox");
Log.d(TAG,"OnActivityResult вернуло значение" + data.getStringExtra("CheckBox"));
if(resultCode == RESULT_OK)
{
tvText.setText(sData);
}
}
}
Код: Выделить всё
public class SettingsActivity extends Activity implements OnClickListener {
Button btnApplySettings;
CheckBox cbBtnLeft, cbBtnRight;
String TAG = "States";
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
Log.d(TAG, "onCreate в SettingActivity");
btnApplySettings = (Button) findViewById(R.id.btnApplySettings);
btnApplySettings.setOnClickListener(this);
cbBtnLeft = (CheckBox) findViewById(R.id.cbBtnLeft);
cbBtnRight = (CheckBox) findViewById(R.id.cbBtnRight);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
if(cbBtnLeft.isChecked()) intent.putExtra("CheckBox","Left");
if(cbBtnRight.isChecked()) intent.putExtra("CheckBox","Right");
Log.d(TAG, intent.getStringExtra("CheckBox") + " SettingActivity до finish()");
setResult(RESULT_OK,intent);
finish();
}
}
Код: Выделить всё
public class BrowserActivity extends Activity {
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.browser);
WebView wvBrowser = (WebView) findViewById(R.id.wvBrowser);
Uri Data = getIntent().getData();
wvBrowser.loadUrl(Data.toString());
}
}
Код: Выделить всё
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:id="@+id/etSiteName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3">
<requestFocus />
</EditText>
<Button
android:id="@+id/btnSiteGo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Go" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btnLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:enabled="false"
android:text="Left" />
<Button
android:id="@+id/btnRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="Right" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/tvText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
</LinearLayout>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Какую кнопку отобразить?" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<CheckBox
android:id="@+id/cbBtnLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Левая кнопка" />
<CheckBox
android:id="@+id/cbBtnRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Правая кнопка" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center" >
<Button
android:id="@+id/btnApplySettings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="Apply" />
</LinearLayout>
</LinearLayout>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/wvBrowser"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req
Ошибка найдена. У вас OnActivityResult с большой буквы, а нужно было с маленькой: onActivityResult.
Среда воспринимает метод как какой-то другой и не переопределяет нужный onActivityResult.
PS: На будущее, если, в эклипсе, слева от метода не стоит зеленая стрелочка, значит это не метод супер класса.
Среда воспринимает метод как какой-то другой и не переопределяет нужный onActivityResult.
PS: На будущее, если, в эклипсе, слева от метода не стоит зеленая стрелочка, значит это не метод супер класса.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.