我有一个android应用程序,它有一个主要的活动,当第一次启动时,将运行注册活动为用户登录(或如果用户还没有登录)。在注册活动中,后退按钮不会执行任何操作。下面是我的代码:
Manifest.xml:
<activity
android:name="com.ddv.android.gcm.support.app.MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.ddv.android.gcm.support.app.RegisterActivity"
android:screenOrientation="portrait" >
</activity>MainActivity.java (调用注册活动):
protected void launchRegistrationIntent() {
Intent intent = new Intent(getBaseContext(), RegisterActivity.class);
startActivityForResult(intent, GET_USERNAME);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "OnActivityResult");
if (data != null) {
final String username = data.getStringExtra("USERNAME");
...
}
}RegisterActivity.java:
@Override
public void onBackPressed() {
Log.d(TAG, "Back button pressed");
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Log.d(TAG, "Back button pressed (old)");
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
return true;
}这个应用是在Android4.0或更高版本上运行的,所以我不认为我需要onKeyDown()覆盖,但我只是想试一试。正如您所看到的,我正在尝试使back按钮将用户带回Home屏幕(因为返回到主活动只会将用户带回Register活动,因为他们仍然没有登录。
但是,当我在Register活动中按下back按钮时,什么也没有发生,没有日志,什么也没有。我不知道这是否与startActivityForResult()调用的活动有关。但当按下后退按钮时,即使是onActivityResult()也不会被回调。
发布于 2015-05-01 00:38:00
试着这样做可能会解决你的问题:
@Override
public void onBackPressed() {
Log.d(TAG, "Back button pressed");
Intent startMain = new Intent(RegisterActivity.this, MainActivity.class);
startMain.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(startMain);
}发布于 2015-05-02 03:34:19
为了更快更精确,我省略了RegisterActivity.java的一些代码,因为大多数其他代码都无法避免这个错误。但我确实遗漏了一个部分,对我来说,这似乎不应该影响后退按钮,但它确实影响了。
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "Starting RegisterActivity");
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
regId = GCMRegistrar.getRegistrationId(this);
Log.d(TAG, "regId = " + regId);
usernameField = (TextView) findViewById(R.id.usernameField);
registerButton = (Button) findViewById(R.id.registerButton);
usernameField.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
verifyUsername();
}
return true;
}
});
verifyingDlg = new ProgressDialog(this);
verifyingDlg.setMessage("Verifying Username...");
}usernameField.setOnKeyListener()覆盖了后退按钮。我在监听器中添加了下面的if语句,现在我的back按钮可以正常工作了(将用户带回他们的主屏幕)。
usernameField.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
verifyUsername();
}
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Log.d(TAG, "Back button pressed (old)");
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
return true;
}
});我的猜测是,由于usernameField处于焦点状态,所以每次按下后退按钮时,它都会调用自定义的onKeyListener,而不是在按下后退按钮时,就好像操作处于焦点中一样。这意味着覆盖的onBackPressed()和onKeyDown()从未被调用过。从那以后,如果usernameField失去了焦点,我会保留添加的onBackPressed()函数作为备份。
https://stackoverflow.com/questions/29972888
复制相似问题