5

Tôi có một hoạt động chính và một tùy chọnTính năng. Trong hoạt động đầu tiên của tôi, tôi gọi menu và đi trên preferencesActivity bằng cách gọi startActivityForResult.Cách trở về từ màn hình ưu tiên sang hoạt động chính?

   case R.id.settings: 
       startActivityForResult(new Intent(this, SettingsActivity.class), LAUNCH_SETTINGS); 
       return true; 

Sau đó, tôi thay đổi cài đặt của mình và muốn trở lại hoạt động chính và xem hoạt động chính với cài đặt mới được áp dụng. Trong onPause() phương pháp nào sau đây (như tôi đúng hiểu phương pháp này sẽ được gọi khi tôi bấm lại nút, phải không?)

@Override 
    protected void onPause() { 
     super.onPause(); 
     setResult(RESULT_OK, new Intent(this, MainActivity.class)); 
     finish(); 
    } 

On hoạt động chính

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == LAUNCH_SETTINGS) { 
      if (resultCode == RESULT_OK) { 
       new RefreshList().execute(ACTION_SELECT); 
       Log.d(TAG, "On activity result"); 
      } 
     } 
    } 

Nhưng acyncTask tôi không gọi và nhật ký không được in. Làm thế nào chính xác tôi có thể làm điều này? Cảm ơn!

Trả lời

12

Trong hoạt động đầu tiên, tôi gọi trình đơn và tiếp tục tùy chọnHoạt động bằng cách gọi startActivityForResult.

Sử dụng startActivityForResult() với PreferenceActivity là khá khác thường. PreferenceActivity được thiết kế để sử dụng với startActivity(). Nếu người bắt đầu số PreferenceActivity quan tâm đến các thay đổi tùy chọn, nó phải đăng ký người nghe thay đổi tùy chọn với đối tượng SharedPreferences.

Sau đó, tôi thay đổi cài đặt của mình và muốn trở lại hoạt động chính và xem hoạt động chính với cài đặt mới được áp dụng.

Tôi khuyên bạn nên sử dụng số SharedPreferences.OnSharedPreferenceChangeListener để thay thế. Hoặc, chỉ cần đọc lại các tùy chọn mà bạn quan tâm trong phương thức onStart() hoặc onResume() của hoạt động ban đầu.

Trong onPause() phương pháp nào sau đây (như tôi đúng hiểu phương pháp này sẽ được gọi khi tôi bấm lại nút, phải không?)

Không, điều đó sẽ không làm việc. onPause() đã quá muộn để gọi setResult().

+0

Cảm ơn. Sẽ cố gắng làm điều này. –

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