Проверьте, была ли нажата обратная клавиша в андроиде?
Скажите, что я нахожусь на своем основном мероприятии, и я начинаю новую деятельность.
MainActivity > NewActivity
И из NewActivity
Я нажимаю клавишу
MainActivity < NewActivity
Я хочу, чтобы MainActivity
что-то делал, если он отображается после NewActivity
закрыт, но не тогда, когда MainActivity
запускается нормально, например, при первом запуске приложения. Кто-нибудь знает, возможно ли это?
Ответы
Ответ 1
Несколько идей:
- Вы можете просто установить флаг в
MainActivity
, когда он запускает NewActivity
.
- Вы можете вызвать
startActivityForResult
из MainActivity
и организовать NewActivity
, чтобы установить результат, который вы получите в MainActivity.onActivityResult()
, когда заканчивается NewActivity
.
Ответ 2
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Log.d(this.getClass().getName(), "back button pressed");
}
return super.onKeyDown(keyCode, event);
}
@Update. Если вы хотите получать уведомления о завершении работы NewActivity, вам необходимо запустить его с помощью startActivityForResult (Intent, requestCode). Затем вы должны переопределить onActivityResult() в MainActivity. Проверьте здесь параметр requestcode, если код возврата равен коду отправки (при запуске childActivity), поместите некоторый код, чтобы сделать свой бизнес.
int MYCODE=1000;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Result OK.d.
if (requestCode == MYCODE) {
// do something good
}
}
Ответ 3
Я пытаюсь использовать метод ниже, чтобы обнаружить кнопку "Назад", нажатую на панели действий в действии по первому методу, а вторая - на обнаружение кнопки мобильного оборудования или кнопку активации активности.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
setResult(RESULT_CANCELED);
super.onBackPressed();
}
Ответ 4
Вы можете переопределить метод onBackPressed() в NewActivity, который обнаружит, когда нажата кнопка возврата. А затем, чтобы сообщить об этом в MainActivity, вы можете отправить булевский флаг в комплекте, чтобы MainActivity обнаружил, что его открытие после NewActivity.
В NewActivity:
@Override
public void onBackPressed() {
boolean fromNewActivity=true;
Intent mainIntent = new Intent(view.getContext(), MainActivity.class);
Bundle bundleObj = new Bundle();
bundleObj.putString("fromNewActivity", Boolean.toString(fromNewActivity));
mainIntent.putExtras(bundleObj);
startActivityForResult(mainIntent, 0);
}
В MainActivity в методе onCreate():
Bundle extras = getIntent().getExtras();
boolean fromNewActivity =Boolean.parseBoolean( extras.getString("fromNewActivity"));
Теперь вы можете проверить, открывается ли MainActivity после NewActivity или нет.
Ответ 5
При запуске NewActivity
вам нужно использовать startActivityForResult
и использовать действительный requestId
. Такой requestId
будет передан вам на onActivityResult
после завершения NewActivity
.