首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用onBackPressed()

未调用onBackPressed()
EN

Stack Overflow用户
提问于 2015-05-01 00:19:12
回答 2查看 972关注 0票数 1

我有一个android应用程序,它有一个主要的活动,当第一次启动时,将运行注册活动为用户登录(或如果用户还没有登录)。在注册活动中,后退按钮不会执行任何操作。下面是我的代码:

Manifest.xml:

代码语言:javascript
复制
<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 (调用注册活动):

代码语言:javascript
复制
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:

代码语言:javascript
复制
@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()也不会被回调。

EN

回答 2

Stack Overflow用户

发布于 2015-05-01 00:38:00

试着这样做可能会解决你的问题:

代码语言:javascript
复制
@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);
}
票数 0
EN

Stack Overflow用户

发布于 2015-05-02 03:34:19

为了更快更精确,我省略了RegisterActivity.java的一些代码,因为大多数其他代码都无法避免这个错误。但我确实遗漏了一个部分,对我来说,这似乎不应该影响后退按钮,但它确实影响了。

代码语言:javascript
复制
@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按钮可以正常工作了(将用户带回他们的主屏幕)。

代码语言:javascript
复制
    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()函数作为备份。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29972888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档