Intereting Posts
Проблема с Eclipse для Android Не удалось создать класс BuildConfig Разрешение экрана Android Изменение содержимого ImageView вызывает OutOfMemoryError Ограничение количества строк в функции ContentResolver.query () Пользовательский attr get color возвращает недопустимые значения Появилась ли новая функция «Видимость пароля» для сломанного существующего drawableRight для EditTexts? Плюсы и минусы использования SVG для Android-игр Начать работу внутри onReceive BroadcastReceiver Данные изображения с Android-камеры2 API перевернуты и склеены на Galaxy S5 Новый Selectable TextView в компоненте android 3 (API <= 11) Не понимаю, как использовать GridLayout.spec () Приложение несовместимо со всеми устройствами после публикации на Market, но то же самое было при перемещении непосредственно на устройство Назначение скрытых значений элементу списка Как удалить объект из Realm Database Android? Событие триггера при нажатии кнопки на Android

Как отправить стоимость через намерение после завершения деятельности

У меня есть активность, которая показывает gridview элементов. Когда я нажимаю на любой из них, я перехожу к другому действию, показывающему информацию об элементе. У меня также есть возможность вернуться (gridview activity) или удалить его.

Если я удалю его, мне нужно обновить gridview, поэтому мне нужно послать переменную с надписью «eey, я удалил элемент, вам нужно обновить».

Я думаю, мне нужно открыть второе действие с помощью startActivityForResult, но я не знаю, как установить значение.

Вариант 1 (стрелка назад): завершает работу. Нет результата назад. Опция 2 (удалить элемент): завершает действие и возвращает результат.

Заранее спасибо!

Solutions Collecting From Web of "Как отправить стоимость через намерение после завершения деятельности"

Вы можете установить свой собственный результат. Как DELETE_ITEM .

На вашей кнопке удаления сделайте что-то вроде этого:

 public static int DELETE_ITEM = 1234; Intent intent = new Intent(); intent.putExtra("ITEM_ID", YOUR ITEM ID); setResult(DELETE_ITEM , intent); 

Теперь в результате вашей деятельности сделайте что-то вроде этого:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (resultCode == DELETE_ITEM) { // CODE TO DELETE ITEM super.onActivityResult(requestCode, resultCode, intent); } } 

Надеюсь это поможет

Первый класс

 Intent i = new Intent(this, Second.class); startActivityForResult(i, 1); protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if (resultCode == RESULT_OK) { String result = data.getStringExtra("result"); //your code } if (resultCode == RESULT_CANCELED) { // Write your code if there's no result } } } 

Второй класс

 Intent returnIntent = new Intent(); returnIntent.putExtra("result", "your message"); setResult(RESULT_OK, returnIntent); finish(); 

Да, вы должны использовать startActivityForResult . Прежде чем вызывать завершение операции, которая показывает информацию об элементе, вам нужно позвонить

 setResult(resultCode, data); finish(); 

В деятельности GridView будет вызываться

 protected void onActivityResult(int arg0, int resultCode, Intent data) 

Мы можем начать новую деятельность. Отправьте значение через намерение, используя это.

Intent main = new Intent (MainActivity.this, SecondActivity.class); Main.putExtra («JobId», jobid); StartActivityForResult (audio, requestCode);

Получите значение в SecondActivity, как это.

Int jobid = getIntent (). GetExtras (). GetInt ("jobId");

Скажем, я хочу перейти от активности A к активности B и передать значение B, и, наконец, закончить A.

Следить за этим:

Где-то в A:

 Intent goToActivityBIntent = new Intent(A.this, B.class); goToActivityBIntent.putExtra("com.example.myapp.data", data); startActivity(goToActivityBIntent); finish(); // close A 

Получить данные в B:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); // receive the data Bundle extras = getIntent().getExtras(); if (extras != null) { data = extras.getString("com.example.myapp.data"); } // Some stuff } 

Нет необходимости завершать работу

 //reload the adapter and use grid.invalidateViews(); Method adapter = new AppAdapter(MyApp.this, MyApp.this, data, show_collection ); grid.invalidateViews(); grid.setAdapter(adapter); 

GridView имеет метод invalidateViews ().

Когда вы вызываете этот метод: «все виды, которые нужно перестроить и перерисовать».

Вам просто нужно после удаления вызова изображения setResult с соответствующим кодом результата и, возможно, данными.

Я думаю, что самый правильный способ добиться этого – вернуться из пользовательского пользовательского результата. Это может быть достигнуто, если вы пишете что-то подобное в своей активности просмотра изображений.

 public static final int RESULT_IMAGE_DELETED = RESULT_FIRST_USER; public static final int RESULT_EXTRA_IMAGE_ID = "extra.imageid"; void onImageDeleted(int imageId) { Bundle resultData = new Bundle(); resultData.putInt(RESULT_EXTRA_IMAGE_ID, imageId); setResult(RESULT_IMAGE_DELETED); finish(); } 

Возможно, вам потребуется установить результат по умолчанию в метод onCreate

 @Override public void onCreate(Bundle savedInstanceState) { // init stuff setResult(RESULT_OK); } 

При работе с сетью вы должны проверить код результата активности вашего средства просмотра изображений, и если это не так, сделайте проверку сетки на ее данные.

 public static final int REQUEST_VIEW_IMAGE = 1; void startImageViewing(int imageId) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.putExtra(ImageViewActivity.EXTRA_IMAGE_ID); startActivityForResult(intent, REQUEST_VIEW_IMAGE); } @Override public void onActivityResult(int requestCode, int resultCode, Bundle data) { if (requestCode == REQUEST_VIEW_IMAGE) { if (resultCode != RESULT_OK) { updateImageGridView(); } } } 

Ну, я сделал так:

Запустите ActivityB от AcivityA с помощью startActivityForResult :

 Intent intent = new Intent(AcivityA.this, ActivityB.class); startActivityForResult(intent, 19); 

В ActivityB используйте setResult для отправки данных в AcivityA :

 @Override public void finish() { Intent intent = new Intent(); intent.putExtra("flag",true); setResult(RESULT_OK, intent); super.finish(); } 

В ActivityA получают данные, которые были отправлены ActivityB как onActivityResult :

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 19) { if(resultCode == RESULT_OK) { boolean flagResult = data.getBooleanExtra("flag"); Log.i("Result", ""+flagResult); } } } 

Надеюсь, что это поможет вам.