Intereting Posts
Показывать информацию в зависимости от того, какая кнопка была нажата Ошибка FileProvider Android Static Linking vs Dynamic Linking против glibc OnOptionsItemSelected () не вызывается при нажатии на элемент меню, на котором установлено действиеLayout Использование цели Crop Получение java.lang.SecurityException: невозможно найти приложение для вызывающего android.app.ApplicationThreadProxy@4266ae80 Комната Android: каждая переменная привязки в запросе должна иметь соответствующий метод Ошибки Android logcat TundConnector и NetlinkEvent WebView onPageFinished не вызывается, когда отображается MapView Получить список контактов, принадлежащих определенной группе Создание элегантных кнопок API-интерфейсы Google google maps получают инструкции по программированию Как выровнять элемент в строке таблицы (влево – вправо-вправо) VFY: невозможно решить статический метод 10876: Android Добавить тень для кнопки в android Phonegap android получает фактический размер экрана

Finish () не закрывает активность при вызове после первого запуска

У меня три действия

  • MessagesAttachPhotoActivity
  • MessageGalleryFolderSelectorActivity
  • ImagePickerActivity

MessagesAttachPhotoActivity вызывает MessageGalleryFolderSelectorActivity с startActivityForResult() .

MessageGalleryFolderSelectorActivity отображает папки фотографий на телефоне, а одна выбирает папку.

ImagePickerActivity вызывается с помощью setActivityForResult() . После того, как изображение выбрано из ImagePickerActivity , оно возвращается к MessagesAttachPhotoActivity через MessageGalleryFolderSelectorActivity .

Когда я запускаю приложение в первый раз, все работает нормально. Однако, если я попытаюсь снова выбрать изображение, MessageGalleryFolderSelectorActivity не закрывается после setResult() .

Я попытался вызвать finish() , this.finish() , ((Activity)getApplicationContext()).finish() super.onBackPressed() и super.onBackPressed() без успеха.

Почему активность не закрывается при последовательных запусках?

Вот мой код:

Вызов MessageGalleryFolderSelectorActivity:

 Intent intent; Bundle arguments = new Bundle(); Bundle bundle; intent = new Intent(this, MessageGalleryFolderSelectorActivity.class); bundle = new Bundle(); bundle.putInt(Constants.INTENT_EXTRA_LIMIT, Constants.IMAGES_SELECT_LIMIT); bundle.putInt("Request", MessageThread.MessageType.IMAGE); intent.putExtras(bundle); startActivityForResult(intent, MessageThread.MessageType.IMAGE); 

ImagePickerActivity:

 imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_MODE, ImagePickerActivity.MODE_MULTIPLE); imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_LIMIT, 10); imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_SHOW_CAMERA, false); imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM,album); //imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES, images); startActivityForResult(imagesIntent, MessageThread.MessageType.IMAGE); 

Передача данных обратно в MessageGalleryFolderSelectorActivity:

 Intent data = new Intent(); data.putParcelableArrayListExtra (ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES, selectedImages); data.putExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM,album); setResult(RESULT_OK, data); finish(); return true; 

Попытка передать данные обратно в начальную вызывающую деятельность, но эта активность не закрывается MessageGalleryFolderSelectorActivity:

 @Override protected void onActivityResult(int requestCode, int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { ArrayList<Image> selectedImages = data.getParcelableArrayListExtra (ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES); String album = data.getStringExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM); Intent intent = new Intent(); intent.putExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM, album); intent.putParcelableArrayListExtra (ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES, selectedImages); setResult(Activity.RESULT_OK, intent); this.finish(); return; } else if (resultCode == RESULT_CANCELED) { } } 

Solutions Collecting From Web of "Finish () не закрывает активность при вызове после первого запуска"

Я думаю, что мы можем ссылаться на родительскую активность, используя getParent (). Итак, в классе MessageGalleryFolderSelectorActivity мы можем написать ((Activity) getParent ()). OnActivityResult (requestCode, resultCode, data) на переопределенном onActivityResult. Итак, мы передаем полученные значения родителям без его обработки.

Он отлично работает. Я проверил одно и то же с помощью 3 видов деятельности: 1. MainActivity 2. SecondActivity 3. ThirdActivity

В MainActivity я начал SecondActivity, нажав кнопку, код выглядит следующим образом:

 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { nextclick(); } }); } public void nextclick() { Intent intent=new Intent(MainActivity.this, SecondAcivity.class); startActivityForResult(intent,1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 1: break; } } 

В SecondActivity я начал ThirdActivity, нажав на floatActionButton, код выглядит следующим образом:

 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { nextclick(); } }); } public void nextclick() { Intent intent = new Intent(SecondAcivity.this, ThirdActivity.class); startActivityForResult(intent, 2); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case 2: //Set data for MainActivity Intent intent = new Intent(); intent.putExtra("album", "dfdfd"); setResult(RESULT_OK, intent); SecondActivity.this.finish(); break; } } } 

В ThirdActivity я начал ThirdActivity, нажав на floatActionButton, код выглядит следующим образом:

 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //Set data for SecondActivity Intent data = new Intent(); data.putExtra("album","album"); setResult(RESULT_OK, data); finish(); } }); } 

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

Попытайтесь использовать finishAffinity() вместо finish() для активности.

Я пробовал такую ​​же логику с тремя действиями, как это

Активность А

  public class A extends AppCompatActivity { private static final int BCODE = 100; private String Tag="A Activity"; Button triggerButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); triggerButton= (Button) findViewById(R.id.triggerButton); triggerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent; Bundle arguments = new Bundle(); intent = new Intent(A.this, B.class); intent.putExtras(arguments); startActivityForResult(intent, BCODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==BCODE){ if(resultCode==RESULT_OK){ Log.e(Tag,"succes"); } } } } 

Из активности A я начал активность B, пропуская намерение с помощью startActivityForResult

Из действия B я снова делаю то же самое

 public class B extends AppCompatActivity { private static final int CCODE =200 ; private String Tag="Activity B"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); Intent intent; Bundle arguments = new Bundle(); intent = new Intent(this, C.class); intent.putExtras(arguments); startActivityForResult(intent, CCODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==CCODE){ if(resultCode==RESULT_OK){ Log.e(Tag,"suceess"); setResult(RESULT_OK,new Intent()); finish(); } } } } 

В действии C я просто заканчиваю деятельность после задания результата

 public class C extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_c); setResult(RESULT_OK,new Intent()); finish(); } } 

Когда активность C заканчивается os, возобновится действие B, а также вызывается onActivityResult (). В onActivityResult of Activity B я устанавливаю результат и заканчивая acitivity.Then OS возобновит активность B и вызовет onActivity результат активности AI многократно пытался это scenerio Отлично работает для меня.