2013-04-18 33 views
10

Tôi có mã sau để cho phép nút trang chủ hoạt động như nút quay lại. Vấn đề tôi phải đối mặt là từ hoạt động này nếu tôi sử dụng nút quay lại thực sự, nó chỉ đơn giản quay trở lại hoạt động trước đó ngay khi tôi rời khỏi nó. Nếu tôi sử dụng nút trang chủ, nó sẽ tải lại trang để tôi mất những gì đã được thực hiện trước đó. Tôi chắc chắn rằng nó là một cái gì đó đơn giản tôi đang mất tích.Android: Sử dụng biểu tượng làm nút quay lại mà không cần tải lại hoạt động trước

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.census_management_search, menu); 
    ActionBar actionBar = getActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    // Handle item selection 
    switch (item.getItemId()) 
    { 
     case android.R.id.home: 
      Intent intent = new Intent(this, CensusManagementActivity.class); 
      NavUtils.navigateUpTo(this, intent); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

Trả lời

15

Thay vì IntentNavUtils hãy thử sử dụng phương pháp onBackPressed().

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    // Handle item selection 
    switch (item.getItemId()) 
    { 
     case android.R.id.home: 
      onBackPressed(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
+0

Cả hai câu trả lời của bạn đều có sự khác biệt? – Jhorra

+2

Tốt hơn là gọi ['onBackPressed()'] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/app/ Activity.java # Activity.onBackPressed% 28% 29) bởi vì nó kiểm tra ngăn xếp của các mảnh và nếu nó là các cuộc gọi trống 'finish()' – vasart

+0

Cảm ơn Hoàn toàn làm việc mà không cần tải lại hoạt động lại phương thức onCreate(). –

3

Nút Home/Up phải tải lại hoạt động mới. Tuy nhiên, nếu bạn muốn mô phỏng chức năng nút quay lại, bạn có thể gọi finish() để quay lại hoạt động trước đó:

case android.R.id.home: 
     finish(); 
     return true; 
+0

Cả hai câu trả lời của bạn đều hoạt động, sự khác biệt là gì? – Jhorra

+0

'finish()' sẽ luôn đóng hoạt động hiện tại, trong khi 'onBackPressed()' xử lý nếu có 'Fragment' trên ngăn xếp phía sau, đảo ngược các hoạt động đó trước khi đóng Activity. – ianhanniballake

+0

Tôi đã thử cả onBackPressed() và kết thúc() và chúng đang tải lại hoạt động trước của tôi. Hoạt động trước đó sử dụng các đoạn và nó làm mới mỗi khi tôi nhấn biểu tượng trở lại. Nếu tôi bấm vào nút quay lại trên điện thoại nó hoạt động tốt. – emir

Các vấn đề liên quan