Как проверить, была ли нажата кнопка возврата - PullRequest
1 голос
/ 28 мая 2020

У меня есть приложение с кнопкой. (см. изображение). Этот предварительный просмотр выполняется только в том случае, если пользователь не активировал определенный параметр. Если он нажимает кнопку, он попадает в настройки. Если он снова нажмет, он вернется к настройкам. Я бы сейчас хотел перехватить эту "назад".
Эта кнопка назад прямо на смартфоне. Как я могу перехватить эту активность? Я кое-что нашел, к сожалению, этого мне не дает. Я что-то не так? или есть еще что-то? Заранее спасибо.

  public class NfcSettingActivity extends AppCompatActivity {

    private Dialog epicDialog;
    private Button btn_nfc_navigate_setting;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nfc_setting);
        btn_nfc_navigate_setting = findViewById(R.id.btn_nfc_navigate_setting);
        btn_nfc_navigate_setting.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(Settings.ACTION_NFC_SETTINGS));
            }
        });

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        System.out.println("back pressed");
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            onBackPressed();
        }
        return super.onKeyDown(keyCode, event);
    }
}

enter image description here

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Вот как я понимаю вашу проблему:

NfcSettingActivity отображается только тогда, когда определенный параметр (вероятно, NF C) не активирован. Если не установлен, пользователь может щелкнуть вашу кнопку в действии и перейдет к параметру NF C Настройка Android. После активации пользователь нажимает кнопку возврата и возвращает его / ее обратно в NfcSettingActivity. На этом этапе вы хотите узнать, была ли успешно активирована настройка NF C.

Вот что вам нужно сделать: вам не нужно ловить нажатие кнопки возврата. Что вам нужно сделать, так это проверить, находится ли NfcSettingActivity в состоянии возобновлено снова. В NfcSettingActivity вам необходимо иметь следующее:

@Override
protected void onResume() {
    super.onResume();

    // Do your NFC checking here!
    // Also, you might need to add a flag here to check if the user has been to the NFC Setting page already!
}

Понимание жизненного цикла действия

1 голос
/ 28 мая 2020

Возможно, вы забыли добавить super.onBackPressed().

override fun onBackPressed() {
    ...
    super.onBackPressed()
}

ОБНОВЛЕНИЕ

Вероятно, вам стоит использовать onOptionsItemSelected:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

И даже возможно onKeyDown:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        onBackPressed();
    }
    return super.onKeyDown(keyCode, event);
}
0 голосов
/ 28 мая 2020

Просто попробуйте написать то, что вы хотите, на обратном нажатии перед вызовом super.onBackPressed (); в переопределенном методе onBackPressed ()

@Override
public void onBackPressed() {
    System.out.println("back pressed");
    super.onBackPressed();
}

Также используйте журнал вместо println ("")

...