我目前有一个活动,当它得到显示的通知也将显示在通知栏。

这样,当用户按home键时,活动被推到后台,他们可以通过通知回到活动。

当用户按下后退按钮时,问题就出现了,我的活动被破坏了,但通知仍然存在,因为我希望用户能够按下后退,但仍然能够通过通知获得活动。但是当一个用户尝试这个我得到空指针,因为它试图开始一个新的活动,而不是带回旧的。

所以本质上,我希望后退按钮的作用与Home按钮完全相同,这是我迄今为止所尝试的方法:


        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)  {
            if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
                    && keyCode == KeyEvent.KEYCODE_BACK
                    && event.getRepeatCount() == 0) {
                Log.d("CDA", "onKeyDown Called");
                onBackPressed();
            }

            return super.onKeyDown(keyCode, event);
        }

        public void onBackPressed() {
            Log.d("CDA", "onBackPressed Called");
            Intent setIntent = new Intent(Intent.ACTION_MAIN);
            setIntent.addCategory(Intent.CATEGORY_HOME);
            setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(setIntent); 

            return;
        }   

然而,上面的代码似乎仍然允许我的活动被销毁,我如何才能阻止我的活动被销毁时,后退按钮按下?


当前回答

看起来我很晚了,但对于那些需要切换到新屏幕和清除后退按钮堆栈的人来说,这里有一个非常简单的解决方案。

startActivity(new Intent(this,your-new-screen.class));
finishAffinity();

finishAffinity ();方法清除返回按钮堆栈。

其他回答

简单地这样做。

@Override
public void onBackPressed() {
    //super.onBackPressed();
}

注释掉//super.onBackPressed();会成功的

以防你想要处理后退按钮(在手机底部)和home按钮(在操作栏左边)的行为,我在我的项目中使用的这个自定义活动可能会帮助你。

import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;

/**
 * Activity where the home action bar button behaves like back by default
 */
public class BackActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupHomeButton();
    }

    private void setupHomeButton() {
        final ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeButtonEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                onMenuHomePressed();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    protected void onMenuHomePressed() {
        onBackPressed();
    }
}

在你的活动中使用的例子:

public class SomeActivity extends BackActivity {

    // ....

    @Override
    public void onBackPressed()
    {
        // Example of logic
        if ( yourConditionToOverride ) {
            // ... do your logic ...
        } else {
            super.onBackPressed();
        }
    }    
}
@Override
public void onBackPressed() {
// Put your code here.
}

//I had to go back to the dashboard. Hence,

@Override
public void onBackPressed() {
    Intent intent = new Intent(this,Dashboard.class);
    startActivity(intent);
}
Just write this above or below the onCreate Method(within the class)

看起来我很晚了,但对于那些需要切换到新屏幕和清除后退按钮堆栈的人来说,这里有一个非常简单的解决方案。

startActivity(new Intent(this,your-new-screen.class));
finishAffinity();

finishAffinity ();方法清除返回按钮堆栈。

就这么做

@Override
public void onBackPressed() {
    super.onBackPressed();
}