亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android-如何覆蓋“Back”按鈕,這樣它就不會完成我的活動?

Android-如何覆蓋“Back”按鈕,這樣它就不會完成我的活動?

慕絲7291255 2019-07-03 15:50:57
Android-如何覆蓋“Back”按鈕,這樣它就不會完成我的活動?我目前有一個活動,當它被顯示時,通知也會顯示在Notificationbar中。這樣,當用戶按home并將活動推送到后臺時,他們就可以通過通知返回到活動中。當用戶按下“后退”按鈕,我的活動就會被銷毀,但通知仍然是我希望用戶能夠按下,但仍然能夠通過通知到達活動時出現的問題。但是當用戶嘗試這一點時,我會得到Null指針,因為它試圖啟動一個新的活動,而不是帶回舊的活動。因此,本質上,我希望后退按鈕的動作與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;         }然而,上面的代碼似乎仍然允許我的活動被銷毀,當按下“后退”按鈕時,我如何才能阻止我的活動被銷毀呢?
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

移除關鍵偵聽器或返回true當你有KEY_BACK.

您只需要下面的命令就可以捕獲回鍵(請確保不要調用超級在……里面onBackPressed()).

此外,如果計劃在后臺運行服務,請確保查看startForeground()并確保有一個持續的通知,否則Android將關閉您的服務,如果它需要釋放內存。

@Overridepublic 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 true; 
    }
    return super.onKeyDown(keyCode, event);}@Overridepublic 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);}


查看完整回答
反對 回復 2019-07-03
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

僅用一行代碼實現它就更容易了:

@Overridepublic void onBackPressed() {
   moveTaskToBack(true);}


查看完整回答
反對 回復 2019-07-03
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

我認為您想要的不是覆蓋后退按鈕(這似乎不是一個好主意-Android操作系統定義了這種行為,為什么要改變它?),而是使用活動生命周期并將您的設置/數據持久化到onSaveInstanceState(Bundle)事件。

@OverrideonSaveInstanceState(Bundle frozenState) {
    frozenState.putSerializable("object_key",
        someSerializableClassYouWantToPersist);
    // etc. until you have everything important stored in the bundle}

然后你用onCreate(束)要從持久化的包中獲取一切,并重新創建您的狀態。

@OverrideonCreate(Bundle savedInstanceState) {
    if(savedInstanceState!=null){ //It could be null if starting the app.
        mCustomObject = savedInstanceState.getSerializable("object_key");
    }
    // etc. until you have reloaded everything you stored}

考慮以上的psuedo代碼,以指出您的正確方向。讀到活動生命周期應該能幫助你確定完成你想要的東西的最佳方法。


查看完整回答
反對 回復 2019-07-03
  • 3 回答
  • 0 關注
  • 428 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號