代码中的"构建首选项"屏幕取决于其他设置



我在这里搜索过并查看过样本,但还没有找到本质上是一个简单问题的答案。根据在前面的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;
}

});

好吧,我自己通过迭代的过程解决了这个问题!其他人可能会觉得这很有用。

只需在xml:中创建一个空的PreferenceScreen

<PreferenceScreen android:title="Show filters for category"
android:summary="Click to choose subjects to delete"
android:key="filterShow">
</PreferenceScreen>

然后在代码中就不需要onClick监听器了——屏幕的内容是在onCreate函数中创建的。事实上,由于当类别列表首选项(请参阅原始代码)中的选择发生变化时,屏幕的内容需要发生变化,因此需要在一个单独的函数中进行,该函数从onCreate和onSharedPreferenceChanged:调用

public static final String KEY_FILTER_SHOW = "filterShow";
...    
private PreferenceScreen mFilterShow;
...
// In onCreate:
// Get a reference to the PreferenceScreen
mFilterShow =
(PreferenceScreen)getPreferenceScreen().findPreference(KEY_FILTER_SHOW);
// Now the code to create the contents of the screen
mFilterShow.removeAll();
CheckBoxPreference cb1 = new CheckBoxPreference(this);
cb1.setTitle("This is cb1");
cb1.setKey("cb1_key");
cb1.setDefaultValue(true);
mFilterShow.addPreference(cb1);

以上只是"概念证明"。它的工作方式完全符合您的预期。在我的最终版本中,我将首先创建一个带有"new"的CheckBoxPreferences数组,然后在为每个类别选项设置屏幕内容时重用它们(更改标题和默认值)。每个类别所需的复选框数量可能不同——我将为所需的最大数量创建一个数组,然后在每种情况下添加我需要的数量。

相关内容

  • 没有找到相关文章

最新更新