Như được mô tả here, tôi đang phân lớp PreferenceFragment và hiển thị nó bên trong một Activity. Tài liệu đó giải thích cách nghe các thay đổi ưu tiên here, nhưng chỉ khi bạn phân lớp PreferenceActivity. Vì tôi không làm điều đó, làm thế nào để tôi nghe những thay đổi ưu tiên?Làm thế nào để lắng nghe những thay đổi ưu tiên trong một PreferenceFragment?
Tôi đã thử triển khai OnSharedPreferenceChangeListener trong PreferenceFragment của mình nhưng dường như không hoạt động (onSharedPreferenceChanged
dường như không bao giờ được gọi).
Đây là mã của tôi cho đến nay:
SettingsActivity.java
public class SettingsActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
}
}
SettingsFragment.java
public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener
{
public static final String KEY_PREF_EXERCISES = "pref_number_of_exercises";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
//IT NEVER GETS IN HERE!
if (key.equals(KEY_PREF_EXERCISES))
{
// Set summary to be the user-description for the selected value
Preference exercisesPref = findPreference(key);
exercisesPref.setSummary(sharedPreferences.getString(key, ""));
}
}
}
preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<EditTextPreference
android:defaultValue="15"
android:enabled="true"
android:key="pref_number_of_exercises"
android:numeric="integer"
android:title="Number of exercises" />
</PreferenceScreen>
Ngoài ra, tùy chọn PreferenceFragment có phải là nơi thích hợp để nghe các thay đổi tùy chọn hoặc tôi nên thực hiện trong Hoạt động không?
Câu hỏi cuối cùng của bạn tất cả đều phụ thuộc vào khung Thiết kế của bạn. Để sử dụng một cách tiếp cận MVC hoặc MVP là khó để làm với Android nhưng tôi cố gắng để cho tất cả các hành động của tôi diễn ra trong hoạt động (Controller) lưu trữ các mảnh, và mảnh là ui chỉ (View/Presenter) –