Java 如何检查是否单击了“后退”按钮
我有一个带按钮的应用程序。(见图)。此预览仅在用户未激活特定设置时发生。如果他按下按钮,他将进入设置。如果他按下返回键,他将返回设置。我现在想截取这个“后退”。Java 如何检查是否单击了“后退”按钮,java,android,nfc,activity-lifecycle,onbackpressed,Java,Android,Nfc,Activity Lifecycle,Onbackpressed,我有一个带按钮的应用程序。(见图)。此预览仅在用户未激活特定设置时发生。如果他按下按钮,他将进入设置。如果他按下返回键,他将返回设置。我现在想截取这个“后退”。 此后退按钮直接位于智能手机上。如何拦截此活动?我发现了一些东西,不幸的是它没有给我这个。我有什么不对劲吗?还是有别的事?提前谢谢 public class NfcSettingActivity extends AppCompatActivity { private Dialog epicDialog; privat
此后退按钮直接位于智能手机上。如何拦截此活动?我发现了一些东西,不幸的是它没有给我这个。我有什么不对劲吗?还是有别的事?提前谢谢
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);
}
}
您可能忘记添加
super.onBackPressed()
更新
可能您应该使用:
甚至可能:
我就是这样理解你的问题的:
NfcSettingActivity
仅在某个设置(可能是NFC)未激活时显示。如果未设置,用户可以单击活动中的按钮,并将用户带到Android的NFC设置。激活后,用户单击“上一步”按钮并将其带回NfcSettingActivity
。此时,您想知道NFC设置是否已成功激活
以下是您需要做的事情:您不需要再按按钮。您需要做的是检查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!
}
在调用super.onBackPressed()之前,只需在backpress上写下您想要的内容即可;在重写的方法onBackPressed()中
在不使用覆盖时,也使用log而不是println(“”)?是
活动还是片段?您使用的是println。您需要改为使用日志。像这样:Log.d(“一些标签”,“一些消息”)代码>更多信息请点击此处:我按下按钮,跳转至NFC设置。如果我现在按下后退按钮,我会回到以前的屏幕。不幸的是,它没有告诉我他在backpressed()上执行了这个方法。所以他不做这个方法。所以这个方法是这样工作的,只要我从窗口按下后退按钮,它就会执行它。但当我按下设置的后退按钮时,什么也没发生。我想有一个方法告诉我它是否来自这个后退按钮。@FischerKlaus,请参阅。您是否在代码中使用了onKeyDown
,onkeydup
?或者onOptionsItemSelected
?不,我没有用它!我来检查一下。谢谢,谢谢。尝试了新的答案。不幸的是,它仍然不起作用(我编辑了我的问题。也许我有更多的错误。哦,我的上帝!非常感谢!我的方法错了!难怪它不起作用。非常感谢你花时间。这不是一个很好的尝试检测用户是否打开了NFC的方法,因为如果不是单击按钮启动设置。操作\u NFC\u设置 >用户进入快速设置以打开NFC,而不是“代码> NFCSETIGNACTION < /CODE >,永远不会停顿,因此无法恢复。最好使用广播接收器来检测NFC设置状态变化。这是正确的。OP需要考虑这种情况。希望将用户带到NFC设置页面,而不是快速设置。
@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 boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
@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!
}
@Override
public void onBackPressed() {
System.out.println("back pressed");
super.onBackPressed();
}