Tôi có mã kế thừa mở rộng PreferenceActivity với một phân lớp được gọi là "Preferences". Các PreferenceActivity được gọi như sau:Làm thế nào để tham khảo hoặc "tìm" một PreferenceActivity?
Intent intent = new Intent(this, Preferences.class);
this.startActivity(intent);
các OnSharedPreferenceChangeListener tồn tại trong một khác mảnh (không phải là lớp con PreferenceActivity) nhưng cần một tham chiếu đến PreferenceActivity để sửa đổi các thuộc tính của một sở thích tùy chỉnh/kiểm soát tương tự như sau:
pref = (CheckBoxPreference) prefActivity.findPreference(res.getString(R.string.keyAccount));
pref.setSummary("something");
trong đó "prefActivity" là tham chiếu đến PreferenceActivity. Bất cứ ai có thể đề nghị làm thế nào để lưu một tham chiếu đến PreferenceActivity khi nó được tạo ra hoặc bằng cách khác xác định vị trí PreferenceActivity khi cần thiết?
CHỈNH SỬA: Bao gồm mã quá thô sơ để hy vọng giúp hiển thị cấu trúc phân cấp và làm rõ.
Tính năng CPA FragmentActivity khởi tạo CPFragment và theo yêu cầu (nhấn nút) tạo Intent để kích hoạt lớp con PreferenceActivity (được gọi là "Preferences").
public class CPActivity extends FragmentActivity
{
public static CPActivity inst;
private CPFragment mFragmentCP;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
inst = this;
mFragmentCP = new CPFragment();
}
public void onSettingsButtonPressed() {
// Bring up the Preferences menu
Intent intent = new Intent(this, Preferences.class);
this.startActivity(intent);
}
}
CPFragment là trình nghe tùy chọn được chia sẻ của chúng tôi (trong số những thứ khác). Đó là trong mã này, nơi chúng tôi muốn sửa đổi mục nhập/kiểm soát tùy chỉnh tùy chỉnh (nghĩa là, không phải giá trị tùy chọn, thay vào đó là thuộc tính trên điều khiển tùy chọn, ví dụ: CheckBoxPreference). Chúng tôi muốn làm điều đó ở đây vì đây là nơi dữ liệu thích hợp được tính toán.
public class CPFragment extends Fragment implements OnSharedPreferenceChangeListener
{
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// In response to preference changes, we want to modify the PreferenceActivity controls.
// So it seems we would need a reference to the PreferenceActivity subclass "Preferences
}
}
Và cuối cùng, lớp con PreferenceActivity "Preferences" thực hiện ít hơn so với hiển thị chế độ xem Cài đặt.
public class Preferences extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_cp);
}
}
Như tôi đã đề cập, chúng tôi muốn để có thể sửa đổi Preference Tuỳ chỉnh trong CPFragment (như trái ngược với PreferenceActivity). Vì vậy, tôi đã tìm kiếm một số cách để định vị PreferenceActivity khi trả lời như onSharedPreferenceChangeListener trong CPFragment.
Tôi nghĩ rằng bạn đang nhận được downvoted vì câu hỏi là không rõ ràng. Vui lòng làm rõ những gì bạn đang yêu cầu. Bạn đang cố gắng cập nhật hoạt động 'Preferences' từ một' Fragment'? Bạn cũng có thể đăng ký 'OnSharedPreferenceChangeListener' từ hoạt động. –
Hmmm ... không chắc chắn những gì không rõ ràng, tôi tuyên bố "OnSharedPreferenceChangeListener tồn tại trong một đoạn khác (không phải là lớp con PreferenceActivity)". Nhưng trong mảnh khác này tôi cần phải sửa đổi một sở thích tùy chỉnh. Vì vậy, tôi cần một tham chiếu bằng cách nào đó để PreferenceActivity để sửa đổi sở thích tùy chỉnh. –