我已經在這裏搜索,看樣品,但還沒有找到一個答案本質上是一個簡單的問題。根據在前面的ListPreference中做出的選擇,我想要在代碼中動態地構建CheckBoxPreferences的首選項屏幕,然後在單擊具有點擊監聽器的簡單首選項時顯示該屏幕。每種情況下複選框的列表和數量都不相同。建立代碼取決於另一個設置偏好屏幕
這是我到目前爲止 - 只是一個簡單的代碼來測試onClick監聽器的概念,但如何獲得複選框首選項屏幕出現?必須有一個簡單的解釋,爲什麼它沒有。我究竟做錯了什麼?我的XML代碼
部分:
<PreferenceCategory android:title="Filters">
<PreferenceScreen android:key="FilterScreen"
android:title="Filters" android:summary="Click to change filter settings">
<ListPreference android:title="Filter type"
android:summary="Set to: Gliding"
android:key="filterType"
android:defaultValue="0"
android:entries="@array/filterTypeOptions"
android:entryValues="@array/filterTypeValues" />
<CheckBoxPreference android:title=""
android:summary="Include Aerodrome Notams"
android:defaultValue="false" android:key="filterIncludeAerodrome" />
<CheckBoxPreference android:title=""
android:summary="Delete night-time Notams"
android:defaultValue="true" android:key="filterDeleteNighttime" />
<ListPreference android:title="Select category to change"
android:summary="Set to: Airspace organisation"
android:key="filterCategory"
android:defaultValue="0"
android:entries="@array/filterCategoryOptions"
android:entryValues="@array/filterCategoryValues" />
<Preference android:title="Show filters for category"
android:summary="Click to choose subjects to delete"
android:key="filterShow" />
</PreferenceScreen>
</PreferenceCategory>
了「顯示過濾器類」內容將取決於「過濾器類型」和「選擇類別以更改」設置。
這是一個簡單的測試代碼我有一個「顯示過濾器」點擊監聽器(剛切下來顯示要領):
public class Settings extends PreferenceActivity
implements OnSharedPreferenceChangeListener
{
------
public static final String KEY_FILTER_SHOW = "filterShow";
------
private Preference mFilterShow;
------
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.settings);
// Get a reference to the preferences
------
mFilterShow = (Preference)findPreference(KEY_FILTER_SHOW);
------
// Set the click listener for Show Filter options
mFilterShow.setOnPreferenceClickListener(new OnPreferenceClickListener()
{
public boolean onPreferenceClick(Preference pref)
{
Context ctx = pref.getContext();
PreferenceScreen screen =
pref.getPreferenceManager().createPreferenceScreen(ctx);
CheckBoxPreference cb1 = new CheckBoxPreference(ctx);
cb1.setTitle("This is cb1");
cb1.setKey("cb1_key");
cb1.setDefaultValue(false);
screen.addPreference(cb1);
return true;
}
});
我相信,必須有一個簡單的答案我有什麼做錯了,或者我錯過了!請幫忙...
我發現如果我添加一行「setPreferenceScreen(screen);」就在「返回true」之前,當我單擊Show Filters首選項時,似乎沒有任何事情發生。但是,如果我點擊「返回」,cb1屏幕出現!如果我再次點擊「返回」,它會將我從設置中徹底退出。所以我覺得我差不多在那裏...... –
接近一點。我在xml中將顯示過濾器首選項更改爲PreferenceScreen,並將PreferenceScreen屏幕= ...改爲=(PreferenceScreen)getPreferenceScreen()。findPreference(KEY_FILTER_SHOW);並刪除了前面評論中提到的臨時setPreferenceScreen(屏幕)。現在,第一次點擊不會顯示任何內容,但第二次點擊顯示兩個cb1,每次後續點擊都會添加一個cb1(這是預期的)。但我不明白爲什麼第一次點擊不會顯示帶有單個cb1的屏幕。點擊'返回'現在按預期工作。 –