Урок 29. Вызываем Activity и получаем результат. Метод startActivityForResult
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Товарищи, мне нужно решить такую задачу - получить результат для ListView.
Приложение работает так: из списка переходим на активность, там жмём на кнопку, возвращаемся, и пункт списка (который мы нажимали) меняет свой фон-картинку (из drawable ресурсов). Я так понимаю, это тоже делается с помощью onResult, и мне нужно передавать не data, а ресурс.
Эти изменения в списке мне так же надо будет хранить в памяти, чтоб при выходе они не стирались, но это уже у другом топике.
Может, у кого-то есть пример подобной реализации. Ну или просто добрый совет.
Спасибо!
Приложение работает так: из списка переходим на активность, там жмём на кнопку, возвращаемся, и пункт списка (который мы нажимали) меняет свой фон-картинку (из drawable ресурсов). Я так понимаю, это тоже делается с помощью onResult, и мне нужно передавать не data, а ресурс.
Эти изменения в списке мне так же надо будет хранить в памяти, чтоб при выходе они не стирались, но это уже у другом топике.
Может, у кого-то есть пример подобной реализации. Ну или просто добрый совет.
Спасибо!
Спасибо за уроки!
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
В списке нужно запустить другое активити:
[syntax=java]public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
..
lvLasts.setOnItemClickListener(onItemClick);
.. }
OnItemClickListener onItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getApplicationContext(), SecondScreen.class);
intent.putExtra("key", "value1");
startActivityForResult(intent, 9);
}
};[/syntax]
Потом получить результат:
[syntax=java]@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null) {return;}
if (resultCode == RESULT_CANCELED) {return;}
if (requestCode == 9) {
String name = data.getStringExtra("key");
// получили резульат
}
}[/syntax]
Во втором активити получаем данные и передаем обратно:
[syntax=java]protected void onCreate(Bundle savedInstanceState) {
..
String user = getIntent().getStringExtra("key");
Intent intent = new Intent();
intent.putExtra("key", "Васька");
setResult(Activity.RESULT_OK, intent); // или Activity.RESULT_CANCELED
..
}
[/syntax]
[syntax=java]public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
..
lvLasts.setOnItemClickListener(onItemClick);
.. }
OnItemClickListener onItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getApplicationContext(), SecondScreen.class);
intent.putExtra("key", "value1");
startActivityForResult(intent, 9);
}
};[/syntax]
Потом получить результат:
[syntax=java]@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null) {return;}
if (resultCode == RESULT_CANCELED) {return;}
if (requestCode == 9) {
String name = data.getStringExtra("key");
// получили резульат
}
}[/syntax]
Во втором активити получаем данные и передаем обратно:
[syntax=java]protected void onCreate(Bundle savedInstanceState) {
..
String user = getIntent().getStringExtra("key");
Intent intent = new Intent();
intent.putExtra("key", "Васька");
setResult(Activity.RESULT_OK, intent); // или Activity.RESULT_CANCELED
..
}
[/syntax]
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
а что тут "key", string name, string user?elron писал(а):В списке нужно запустить другое активити:
[syntax=java]public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
..
lvLasts.setOnItemClickListener(onItemClick);
.. }
OnItemClickListener onItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getApplicationContext(), SecondScreen.class);
intent.putExtra("key", "value1");
startActivityForResult(intent, 9);
}
};[/syntax]
Потом получить результат:
[syntax=java]@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null) {return;}
if (resultCode == RESULT_CANCELED) {return;}
if (requestCode == 9) {
String name = data.getStringExtra("key");
// получили резульат
}
}[/syntax]
Во втором активити получаем данные и передаем обратно:
[syntax=java]protected void onCreate(Bundle savedInstanceState) {
..
String user = getIntent().getStringExtra("key");
Intent intent = new Intent();
intent.putExtra("key", "Васька");
setResult(Activity.RESULT_OK, intent); // или Activity.RESULT_CANCELED
..
}
[/syntax]
т.е. что в них должно быть?
объясните, пожалуйста.
Спасибо за уроки!
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
intent.putExtra("key", "value1");
- передает ключ и значение в контейнер, у этого контейнера потом извлекается значение(getIntent().getStringExtra("key")), но нужно знать ключ, этот ключ ("key"). Без ключа не получишь переданное значение. Это в уроке написано.
- передает ключ и значение в контейнер, у этого контейнера потом извлекается значение(getIntent().getStringExtra("key")), но нужно знать ключ, этот ключ ("key"). Без ключа не получишь переданное значение. Это в уроке написано.
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Спасибо Вам за помощь, человечище!elron писал(а):intent.putExtra("key", "value1");
- передает ключ и значение в контейнер, у этого контейнера потом извлекается значение(getIntent().getStringExtra("key")), но нужно знать ключ, этот ключ ("key"). Без ключа не получишь переданное значение. Это в уроке написано.
Я помещаю в Intent объект с именем ключа (key) и значением (R.drawable.newImg), верно?
А что мне нужно положить в string name и string user? что-то из этого должно быть массивом новых значений drawable для пунктов списка, да?
Спасибо за уроки!
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
- Я помещаю в Intent объект с именем ключа (key) и значением (R.drawable.newImg), верно?
- Да.
Что нужно передать, то и кладите. String user = getIntent().getStringExtra("key"); в строку user заносится значение(которое берется у контейнера, используя ключ). Я не знаю что вам нужно, это пример кода. Адаптируйте этот пример под вашу ситуацию. Советую для начала изучить java(не смотря на то что этих интентов там нет).
- Да.
Что нужно передать, то и кладите. String user = getIntent().getStringExtra("key"); в строку user заносится значение(которое берется у контейнера, используя ключ). Я не знаю что вам нужно, это пример кода. Адаптируйте этот пример под вашу ситуацию. Советую для начала изучить java(не смотря на то что этих интентов там нет).
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Посмотрите Бриллиантовую руку, там он сказал фразу(ключ) и получил бриллианты(значение), так и здесь))
http://www.youtube.com/watch?v=gaG231aXCdM
http://www.youtube.com/watch?v=gaG231aXCdM
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Добрый день.
Проблема с этим и предыдущим уроком в AndroidStudio.
В предыдущем уроке при вызове ViewActivity приложение падает.
В этом уроке приложение падает после ввода имени и попытке возврата в MainActivity.
Логи:
Предыдущий урок:
Этот урок:
P.S. Сам код не стал копировать, т.к. он идентичен тому, что написан в уроке.
Проблема с этим и предыдущим уроком в AndroidStudio.
В предыдущем уроке при вызове ViewActivity приложение падает.
В этом уроке приложение падает после ввода имени и попытке возврата в MainActivity.
Логи:
Предыдущий урок:
Код: Выделить всё
03-27 00:10:07.219 1019-1019/ru.startandroid.p0281_intentextras E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at ru.startandroid.p0281_intentextras.MainActivity.onClick(MainActivity.java:60)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Код: Выделить всё
03-27 00:11:17.779 1081-1081/ru.startandroid.p_0291simpleactivityresult E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at ru.startandroid.p_0291simpleactivityresult.NameActivity.onClick(NameActivity.java:55)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
не верю! Был бы идентичный, null-ов бы не было.relios писал(а):P.S. Сам код не стал копировать, т.к. он идентичен тому, что написан в уроке.
Судя по 28 уроку null у вас либо etFName, либо etLName.
А это значит либо в onCreate() что-то не то, либо в layout'е.
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Вот коды 28-го урока:klblk писал(а):не верю! Был бы идентичный, null-ов бы не было.relios писал(а):P.S. Сам код не стал копировать, т.к. он идентичен тому, что написан в уроке.
Судя по 28 уроку null у вас либо etFName, либо etLName.
А это значит либо в onCreate() что-то не то, либо в layout'е.
activity_main.xml
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_horizontal"
android:text="Input your Name">
</TextView>
<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:stretchColumns="1">
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="First Name">
</TextView>
<EditText
android:id="@+id/etFName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp">
<requestFocus>
</requestFocus>
</EditText>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Last Name">
</TextView>
<EditText
android:id="@+id/etLName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp">
</EditText>
</TableRow>
</TableLayout>
<Button
android:id="@+id/btnSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Submit">
</Button>
</LinearLayout>
Код: Выделить всё
package ru.startandroid.p0281_intentextras;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements View.OnClickListener {
EditText etFName;
EditText etLName;
Button btnSubmit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText etFName = (EditText) findViewById(R.id.etFName);
EditText etLName = (EditText) findViewById(R.id.etLName);
Button btnSubmit = (Button) findViewById(R.id.btnSubmit);
btnSubmit.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View view) {
Intent intent = new Intent(this, ViewActivity.class);
intent.putExtra("fname", etFName.getText().toString());
intent.putExtra("lname", etLName.getText().toString());
startActivity(intent);
}
}
Код: Выделить всё
<?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">
<TextView
android:id="@+id/tvView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:text="TextView"
android:textSize="20sp">
</TextView>
</LinearLayout>
Код: Выделить всё
package ru.startandroid.p0281_intentextras;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class ViewActivity extends Activity {
TextView tvView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view);
TextView tvView = (TextView) findViewById(R.id.tvView);
Intent intent = getIntent();
String fName = intent.getStringExtra("fname");
String lName = intent.getStringExtra("lname");
tvView.setText("Your name is: " + fName + " " + lName);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_view, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
перед тем как выкладывать код вы внимательно прочитали моё сообщение выше?
Я сказал что ошибка возможно в onCreate() и был прав. Сравните свой код и код урока (построчно)
Я сказал что ошибка возможно в onCreate() и был прав. Сравните свой код и код урока (построчно)
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Хотелось бы добавить к статье (может кому-нибудь поможет) о существовании такой вот штуки: Если в активности А, куда нужно принять результат от активности Б есть диалоги, то такой вид передачи работать не будет, так как при использовании диалогов срабатывает метод onActivityResult ().
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
есть же реквест код для определения от кого результат пришел.Sergey777 писал(а):Хотелось бы добавить к статье (может кому-нибудь поможет) о существовании такой вот штуки: Если в активности А, куда нужно принять результат от активности Б есть диалоги, то такой вид передачи работать не будет, так как при использовании диалогов срабатывает метод onActivityResult ().
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Может конечно я коряворукий, но у меня активность, куда нужно принять данные, не загружалась. А потом в сети на одном из форумов писали, что есть такая проблема с диалогами.doter.ua писал(а):есть же реквест код для определения от кого результат пришел.Sergey777 писал(а):Хотелось бы добавить к статье (может кому-нибудь поможет) о существовании такой вот штуки: Если в активности А, куда нужно принять результат от активности Б есть диалоги, то такой вид передачи работать не будет, так как при использовании диалогов срабатывает метод onActivityResult ().
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Вопрос.
Активити А вызывает активити Б. Активити Б меняет ориентацию и пересоздается. Метод onActivityResult не срабатывает. Что делать?
Активити А вызывает активити Б. Активити Б меняет ориентацию и пересоздается. Метод onActivityResult не срабатывает. Что делать?
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
По-моему onActivityResult срабатывает когда активити, запущенное forResult, закрывается и вызывает метод setResult.w201 писал(а):Вопрос.
Активити А вызывает активити Б. Активити Б меняет ориентацию и пересоздается. Метод onActivityResult не срабатывает. Что делать?
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
По вашему, да и по моему так и должно быть. Но если вы повернете ориентацию активити В, то onActivityResult не будет вызван. Видимо где-то теряется указатель на активити В у активити А....Но что с этим делать совершенно непонятно.
- Коваленко Павел
- Сообщения: 14
- Зарегистрирован: 19 апр 2015, 16:35
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Доброго времени суток. На сайте, на этом уроке упал интерфейс.
-
- Сообщения: 12
- Зарегистрирован: 15 мар 2015, 21:55
Re: Урок 29. Вызываем Activity и получаем результат. Метод s
Приветствую всех. Очень нужна помощь. Есть два активити (First Second) Делаю переход из First в Second startActivityForResult(intent, 1); или startActivity(intent); (пробовал оба) Как мне вернуться обратно из Second активити, именно в то место откуда я туда попал? (Для перехода в Second activity использовался элемент листа)