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

У меня есть активность, которая показывает 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); } } } 

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