У меня есть основное действие: когда я нажимаю кнопку, запускается новое действие, для этого я использовал следующий код:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
Приведенный выше код был запущен из основного действия.
Теперь в моем новом действии, которое вызывается основным действием, у меня есть кнопка возврата. Когда я нажимаю эту кнопку "Назад", я хочу, чтобы мое новое действие закрывалось, и оно должно вернуться к исходному основному действию.
Я пробовал позвонить super.finish()
и просто finish()
(из нового действия), но это закрывает все мое приложение (включая мое основное действие).
Как я могу просто закрыть действие, которое в данный момент находится в фокусе, а затем вернуться к основному действию?
ИЗМЕНЕНО
Тот факт, что кнопка "Назад" на моем телефоне также закрывает все мое приложение, заставляет меня думать, что я неправильно запустил второе действие?
Хорошо, я искал,
Я создал действие настроек, которое использует тот же код манифеста и тот же код для запуска действия.
Для настроек «Активность», когда я нажимаю кнопку «Назад», он возвращается к основному действию.
При активности, упомянутой выше в основном вопросе, он просто закрывает все мое приложение.
Таким образом, проблема, похоже, не в коде завершения действия, а в самом действии.
источник
Ответы:
Я думаю, вы вызываете
finish()
методMainActivity
перед тем, как начатьSettingsActivity
.Описанный вами сценарий будет происходить двумя способами:
ЛИБО
Вы установили
android:noHistory = "true"
дляMainActivity
внутренней ,AndroidManifest.xml
что приводитMainActivity
кfinish
автоматически при нажатии на клавишу возврата.ИЛИ
Прежде чем переключиться на «SettingsActivity», вы вызвали
finish()
свойMainActivity
, который убивает его. Когда вы нажимаете кнопку «Назад», поскольку в стеке не задано другое действие, оно возвращается на главный экран.источник
Вы можете вернуться к предыдущему действию, просто вызвав finish () в действии, в котором находитесь. Обратите внимание на любой код после вызова finish () - вы можете просто выполнить возврат после вызова finish (), чтобы исправить это.
Если вы хотите вернуть результаты для первого действия, то при запуске второго действия вам потребуется:
startActivityForResults(myIntent, MY_REQUEST_CODE);
Затем внутри вызываемой активности вы можете получить намерение из параметра onCreate () или использовать
getIntent();
Чтобы установить возврат результата для действия один, затем в действии два выполните
setResult(Activity.RESULT_OK, MyIntentToReturn);
Если у вас нет намерения возвращаться, просто скажите
setResult(Activity.RESULT_OK);
Если действие имеет плохие результаты, вы можете использовать Activity.RESULT_CANCELED (используется по умолчанию). Затем в первом действии вы делаете
onActivityResult(int requestCode, int resultCode, Intent data) { // Handle the logic for the requestCode, resultCode and data returned... }
Чтобы завершить упражнение два, используйте те же методы с finish (), как описано выше, с уже установленными результатами.
источник
Когда вы нажимаете кнопку, вы можете вызвать:
super.onBackPressed();
источник
если вы используете фрагмент, вы должны использовать
getActivity().onBackPressed();
если вы используете одно действие, вы можете использовать
finish();
источник
попробуйте этот код вместо
finish
:onBackPressed();
источник
Я считаю, что ваше второе занятие, вероятно, не связано с вашим основным занятием как детским. Проверьте свой
AndroidManifest.xml
файл и посмотрите,<activity>
содержит ли запись для вашего дочернего действияandroid:parentActivityName
атрибут. Это должно выглядеть примерно так:<?xml ...?> ... <activity android:name=".MainActivity" ...> </activity> <activity android:name=".ChildActivity" android:parentActivityName=".MainActivity" ...> </activity> ...
источник
Вы слишком усложняете это. Если я понимаю, что вы пытаетесь сделать правильно, встроенная кнопка «назад» и сам Android сделают всю работу за вас: http://developer.android.com/guide/components/tasks-and-back- stack.html
Кроме того, реализация настраиваемой кнопки «назад» нарушает основные рекомендации по обеспечению качества приложений UX-N1: http://developer.android.com/distribute/googleplay/quality/core.html.
источник
Button edit = (Button) view.findViewById(R.id.yourButton); edit.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(this, YourMainActivity.class); startActivity(intent); finish(); } });
источник
Это закрывает все приложение:
this.finish();
источник
Просто не обращайтесь
finish()
к вам,MainActivity
тогда это устраняет необходимость переопределения вашегоonBackPressed()
в вашем,SecondActivity
если вы не делаете другие вещи в этой функции. Если вы чувствуете «потребность» в этой кнопке возврата, вы можете просто позвонитьfinish()
по номеру,SecondActivity
и он доставит вас к себе,MainActivity
пока вы не позвонилиfinish()
по нему.источник
Activity
или всегда возвращаться кMainActivity
? Кроме того, если у вас заканчивается память,Bitmaps
вам следует прочитать эту часть документации . Мне помоглоЯ не знаю, полезно это или нет, но я боролся с той же проблемой, и я нашел довольно простой способ, только с глобальной логической переменной и действием onResume (). В моем случае действие C при нажатии определенной кнопки должно запускать finish () Activity B!
Activity_A -> Activity_B -> Activity_C
Activity_A (обычно открывается Activity_B)
Activity_B (при нажатии на какую-то кнопку открывается Activity_C):
// Global: boolean its_detail = false; // ------- SharedPreferences prefs = getApplicationContext().getSharedPreferences("sharedpreferences", 0); boolean v = prefs.getBoolean("select_client", false); its_detail = v; startActivity(C); @Override public void onResume(){ super.onResume(); if(its_detail == true){ finish(); } }
Итак, всякий раз, когда я нажимаю кнопку на Activity C, она выполняет функцию onResume () для Activity B и возвращается к Activity A.
источник
@Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if ( id == android.R.id.home ) { finish(); return true; } return super.onOptionsItemSelected(item); }
Попробуйте, он работает как на кнопке возврата на панели инструментов, так и на аппаратной кнопке возврата .
источник
android:parentActivityName=".MainActivity"
для второго. Этот код обрабатывает эту кнопку Home / Back в панели инструментов и просто завершает текущее действие, возвращаясь к предыдущему в стеке. Спасибо.Finish закрывает все приложение, это то, что я ненавижу в разработке Android. Не завершать, это нормально, но они не успевают за синтаксисом ok, который у них есть
startActivity(intent)
Почему нет
источник
Мы столкнулись с очень похожей ситуацией.
Неверный ответ "на обратное нажатие"
Я проверил все ответы, опубликованные выше, и ни один из них не работал. Синтаксис Java для перехода между Activity 2 и Activity 3 был признан правильным.
Только что из кода при вызове стороннего приложения. по деятельности. Мы решили изучить конфигурацию, что в конечном итоге позволило нам определить основную причину проблемы.
Объем : Настройка действия 2 (вызывающий).
Основная причина :
android:launchMode="singleInstance"
Решение :
android:launchMode="singleTask"
По-видимому, в этой проблеме «при обратном нажатии» singleInstance рассматривает вызываемые Activity в одном экземпляре с вызывающим Activity, тогда как singleTask позволяет вызываемым Activity иметь собственную идентичность, достаточную для того, чтобы предполагаемое обратное нажатие функционировало, чтобы работать должным образом .
источник
{ getApplicationContext.finish(); }
Попробуйте этот метод ..
источник
возможно, вы вызываете finish (); в событии нажатия кнопки, поэтому основное действие закрывается сразу после того, как вы щелкнули по кнопке, и когда вы вернетесь из следующего действия, приложение завершит работу, потому что основное действие уже закрыто и нет активных действий.
источник
в методе onCreate вашей активности напишите следующий код.
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true);
Затем переопределите выбранный метод onOptionsItem вашего действия следующим образом
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case android.R.id.home: finish(); } return super.onOptionsItemSelected(item); }
И тебе хорошо идти.
источник
Вы должны использовать это в своей MainActivity
Intent intent = new Intent(context , yourActivity); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_MULTIPLE_TASK); context.startActivity(intent);
Флаг запустит несколько задач, которые сохранят вашу MainActivity, когда вы вызовете finish, он убьет другую активность и вернет вас к MainActivity.
источник