Tôi có hoạt động tùy chọn có language
là ListPreference
hiển thị danh sách ngôn ngữ khả dụng. Tôi có thể điền vào danh sách khi onCreate được gọi, nhưng tôi muốn điền vào danh sách khi người dùng nhấp vào nó.Làm thế nào để điền ListPreference tự động khi onPreferenceClick được kích hoạt?
this is the java code
:
public class SettingsActivity extends PreferenceActivity implements OnPreferenceClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
addPreferencesFromResource(R.xml.settings);
} catch (Exception e) {
}
}
@Override
public boolean onPreferenceClick(Preference preference) {
if((preference instanceof ListPreference) && (preference.getKey().equals("language"))){
ListPreference lp = (ListPreference)preference;
CharSequence[] entries = { "English", "French" };
CharSequence[] entryValues = {"1" , "2"};
lp.setEntries(entries);
lp.setDefaultValue("1");
lp.setEntryValues(entryValues);
return true;
}
return false;
}
}
và đây là settings.xml
(ưu tiên):
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="General Settings">
<CheckBoxPreference android:key="enabled" android:title="Application Status" android:summary="Enable or disable the application" />
<ListPreference
android:key="language"
android:title="Language"
android:dialogTitle="Application language"
android:summary="Select the Application language"
/>
</PreferenceCategory>
</PreferenceScreen>
Tôi đã tìm kiếm nhưng không tìm thấy kết quả! Một ngoại lệ xảy ra mỗi khi tôi nhấp vào danh sách đó.
Câu trả lời này có hiệu quả nhưng có một chút lỗi nếu bạn cho phép setListPreferenceData chỉ chạy trên Click (và không onCReate). Đó là vì nếu phương thức setListPreferenceData mất nhiều hơn một phần trong một giây thì danh sách mặc định được hiển thị trước khi dữ liệu được đặt và người dùng buộc phải hủy rồi mở lại tùy chọn. Có cách cập nhật danh sáchPreference đã được hiển thị sau khi bạn setListPreferenceData kết thúc không? – Malabarba
Nếu bạn cần hành vi tùy chỉnh, đặt cược tốt nhất của bạn có thể sẽ mở rộng 'ListPreference' hoặc' Preference'. Cách giải quyết hoàn toàn 'xã hội' sẽ là đặt giá trị mục danh sách mặc định thành một cái gì đó như là –
ccpizza
Vâng, tôi phải tự mở rộng listpreference. Nhưng nó không quá tệ. onCreate là phương thức duy nhất cần quá tải. – Malabarba