2015-12-22 205 views
2

帖子已被編輯Android應用程序沒有正常關閉時,點擊返回

我編程的Android應用程序作爲一個實踐項目學習的目的。我遇到一個問題,當我在訪問設置活動並在其中進行更改(複選框選項)後按主活動上的後退按鈕時,它會返回設置活動。如果在設置活動中沒有進行任何更改,並且我回到主要活動並再次按下,則退出正常。如果我訪問任何其他活動,然後返回主頁,請再次按下,一鍵點擊即可關閉。

下面您會看到設置活動和主要活動的後退按鈕代碼。

user_settings_activity.java(設置活動):

// When the back button is pressed, it goes back to the previous screen. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

User_Options.java(主要活動):

// When the back button is clicked, the user is asked if they want to close the app window or not. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

請告訴我,以所需的任何其他代碼。

任何幫助解決方案,將不勝感激。

謝謝。

SOLUTION

首先,謝謝大家誰堅持這一問題提供答覆和意見。我感謝大家的幫助。現在經過一番修改之後,我終於設法解決了這個問題。代碼如下。

設置的活動:

// For the go back button. 
public void go_back_butt(View v){ 
    // Goes to main activity. 
    Intent main_activity = new Intent(getApplicationContext(), User_Options.class); 
    main_activity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    main_activity.putExtra("EXIT", true); 
    startActivity(main_activity); 

    finish(); 
} 

而且

// When the back button is pressed, it goes back to the previous screen. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

主要活動:

// When the back button is clicked, the user is asked if they want to close the app window or not. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 

    if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
    } 

    android.os.Process.killProcess(android.os.Process.myPid()); 
} 

說明:

如前所述@chichiangho,我需要採取IN-深入瞭解在棧上。由於我在這方面的知識有限,所以我設法弄清楚,由於某種原因,設置活動並沒有像我最初的理論那樣正確關閉。所以這讓我想知道如何在保留我保存的設置的同時正確處理這個問題。

感謝@kevz和@MFP響應,我能夠創建一個解決方案。我實現了一個「返回」按鈕(參見代碼),並在主要活動上使用了kill過程來確保應用程序「正常退出」。我還將設置活動的意圖傳遞給主要活動以確保完成()過程發生。

謝謝大家誰參與了,並花時間發佈你的有用答案,讓我在箱子外思考更多,同時學習有關android應用開發的新東西=)。

+1

我讀了你的簡短版本,我猜你在傳遞到第二個活動時不會打電話完成 –

+0

@Mohit G:r在BackPress的SettingActivity中啓動MainActivity? – kevz

+0

我認爲這是我在手機中發現的問題,僅在調試我的應用程序時啓動兩次 – Androider

回答

1

當您關閉SettingActivity時,請不要執行任何操作。

這裏是你的愛好堆棧。

在第一:MainActivity

開始SettingActivity:MainActivity-> SettingActivity

開始MainActivity在onBackPressed():MainActivity-> SettingActivity-> MainActivity

然後完成SettingActivity:MainActivity-> MainActivity

看,有兩個MainActivities,我想這就是爲什麼你的MainActivity會看起來像重啓。

+0

事件你在調用onBackPressed()時什麼也不做,活動將自行完成並返回到之前的活動 – chichiangho

+0

這很奇妙,但是我遇到了一個新問題。現在,當我在設置中更改某些內容後單擊後退按鈕。我去主要活動。但是,當我點擊主要活動的後退按鈕時,即使我沒有對它進行編程,它也會返回到設置活動。 –

+0

@Mohit G:使用startActivityForResults()爲結果啓動ur設置活動。然後,如果你做任何改變,你可以簡單地setResult()和finish()settingActivity。 – kevz

4

重寫onBackPressed功能的活動

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    // Call finish() function here 
    finish(); 
} 
+0

感謝您的回覆。我試過你的解決方案,但它沒有產生任何改進。結果是一樣的。 –

+0

刪除此行:Intent main_activity = new Intent(user_settings_activity.this,User_Options.class); startActivity(main_activity); | from user_settings_activity.java –

+0

我已經這麼做了。重新加載主要活動的問題已消失。但現在有了一個新的。當我在設置活動中更改某些內容並返回主要活動時。點擊返回退出,返回到設置活動,而不是退出應用程序。 –

2

中您可以使用下面的代碼從應用程序退出。

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    ActivityCompat.finishAffinity(MainActivity.this); 
    android.os.Process.killProcess(android.os.Process.myPid()); 
} 
+0

感謝您的回覆。我嘗試了上面的代碼,但它不起作用,因爲問題仍然存在。 –

+0

感謝您的幫助,我制定了一個解決方案。檢查出來,如果你有興趣,我已經把它發佈在我原來的帖子裏了)。 –

1

使用這個..

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    { 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

感謝您的幫助,我制定了一個解決方案。檢查出來,如果你有興趣,我已經把它發佈在我原來的帖子裏了)。 –

1

從MainActivity按鈕啓動SettingActivity卡嗒

btnSecond.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, SettingActivity.class)); 
     } 
}); 

無需啓動SettingActivity後完成()MainActvity。

不需要在SettingActivity中重寫onKeyDown()或onBackPressed()。

無論你在設置活動時如何改變wt值,都不會覆蓋上述任何方法,它可以正常工作。

+0

感謝您的回覆。我試過了,但沒有做任何改變。我遵循@chichiangho建議並解決了最初的問題。但是,如果我在設置活動中改變了任何內容並返回,新的彈出窗口就會彈出。如果我再按退出,它會讓我回到設置活動。主要活動的代碼與上面發佈的代碼相同。 –

+0

@Mohit G:查看我編輯的答案 – kevz

+0

感謝您的回覆和所有的幫助。我必須在白天明天嘗試這個,因爲現在對我來說已經很晚了。我會讓你知道它是怎麼回事。再次感謝=)。 –

相關問題