2012-08-29 30 views
7

Tôi đang phát triển một ứng dụng Android. Nếu tôi nhấn nút quay lại, trạng thái đơn đăng ký của tôi sẽ được lưu. Tôi nên sử dụng thông tin gì để lưu trạng thái ..tôi bị nhầm lẫn với tất cả các số này onPause(), onResume() hoặc onRestoresavedInstance() ??? mà tôi nên sử dụng để lưu trạng thái của ứng dụng của tôi? Ví dụ như khi tôi nhấn nút thoát toàn bộ ứng dụng của tôi nên thoát tôi đã sử dụng kết thúc()?lưu trạng thái khi nhấn nút quay lại

public void onCreate(Bundle savedInstanceState) 
    { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    s1=(Button)findViewById(R.id.sn1); 
    s1.setOnClickListener(this); 
    LoadPreferences(); 
    s1.setEnabled(false); 
    } 

    public void SavePreferences() 
{ 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean("state", s1.isEnabled()); 
     } 
public void LoadPreferences() 
{ 
    System.out.println("LoadPrefe"); 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     Boolean state = sharedPreferences.getBoolean("state", false); 
     s1.setEnabled(state); 
     } 
@Override 
public void onBackPressed() 
{ 
    System.out.println("backbutton"); 
    SavePreferences(); 
    super.onBackPressed(); 
} 
+0

Nếu hoạt động được đóng, sử dụng onDestroy() – Aviral

+0

Những loại trạng thái ứng dụng mà bạn muốn lưu? một số giá trị hộp văn bản hoặc danh sách? – VendettaDroid

+0

Lưu các giá trị cho hộp văn bản hoặc ui quan trọng khác có thể được thực hiện với sự trợ giúp của sharedpreferences. Vì vậy, ngay cả khi ứng dụng thoát hoặc phá hủy, người ta có thể đọc các giá trị đã lưu từ sharedpreferences. – VendettaDroid

Trả lời

8

Những gì bạn phải làm là, thay vì sử dụng keyCode Quay lại, bạn có ghi đè lên các phương pháp dưới đây trong hoạt động của bạn,

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
} 

Và lưu trạng thái của nút bằng cách sử dụng SharedPrefrence, và thời gian tiếp theo khi bạn nhập Hoạt động của bạn nhận giá trị từ số Sharedpreference và đặt trạng thái đã bật của nút tương ứng.

Ví dụ,

private void SavePreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean("state", button.isEnabled()); 
    editor.commit(); // I missed to save the data to preference here,. 
    } 

    private void LoadPreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    Boolean state = sharedPreferences.getBoolean("state", false); 
    button.setEnabled(state); 
    } 

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

onCreate(Bundle savedInstanceState) 
{ 
    //just a rough sketch of where you should load the data 
    LoadPreferences(); 
} 
+0

Tôi hiểu mã. Đây là ứng dụng của tôi thưa ông, nơi người dùng lựa chọn một điểm đến thông qua bản đồ google. Ứng dụng theo dõi vị trí hiện tại của người dùng và khi người dùng đạt đến desination báo động được báo lại. Tôi phải lưu trạng thái của nút của tôi, GPS phải chạy ở chế độ nền, âm báo thức do người dùng chọn phải được lưu, trạng thái nút tạm ẩn phải được bật. Vì vậy, như bạn nói với tôi phải xác định SavePreferences và LoadPreferences cho tất cả các nút mà tôi sử dụng ???? – Sindu

+0

có, bạn có thể lưu tất cả các loại dữ liệu nguyên thủy bằng cách sử dụng Tùy chọn được chia sẻ. Sửa đổi mã trên theo yêu cầu của bạn và bạn nên làm tốt. Nhận tất cả các trạng thái của nút và lưu nó với giá trị khóa khác nhau. cũng duy trì tên âm bằng cách sử dụng khóa chuỗi và sử dụng nó khi bạn quay lại. –

+0

Tôi có thể sử dụng onPause hoặc onResume để dụ của tôi được lưu thay vì SharedPreferences này không? – Sindu

3

bạn có thể sử dụng cách này

public void onBackPressed() { 
    // Save settings here 
}; 

Được gọi là khi hoạt động này đã phát hiện ra báo chí của người sử dụng phím quay lại. Việc thực hiện mặc định chỉ đơn giản là kết thúc hoạt động hiện tại, nhưng bạn có thể ghi đè lên điều này để làm bất cứ điều gì bạn muốn.

lưu trạng thái đơn đăng ký của bạn theo phương pháp này.