在Honeycomb兼容的首选项屏幕中的findPreference

时间:2013-02-20 17:14:22

标签: android android-fragments android-preferences

我的方案很简单:我的偏好设置之一是仅在用户购买了应用内商品时激活的高级功能。

我有一个PreferenceScreen,它既符合蜂窝前和后蜂窝碎片模型。

示例片段

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public static class SocialPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);

            addPreferencesFromResource(R.xml.pref_social);
                    findPreference(getString(R.string.preference_donateBitcoin))
            .setOnPreferenceClickListener(new OnPreferenceClickListener() {

示例片段2

    private void setupSimplePreferencesScreen() {
    if (!isSimplePreferences(this)) {
        return;
    }

    // In the simplified UI, fragments are not used at all and we instead
    // use the older PreferenceActivity APIs.

    // Add 'general' preferences.

    addPreferencesFromResource(R.xml.pref_social);
            findPreference(getString(R.string.preference_donateBitcoin))
            .setOnPreferenceClickListener(new OnPreferenceClickListener() {

这两个片段,一个在PreferenceFragment类,另一个在PreferenceActivity,管理偏好的创建。

现在问题是:我正在使用回调方法,如果购买了SKU,我需要访问首选项以启用它

    @Override
public void onPurchasedAsyncListenerResult(String sku, boolean isPurchased) {
    if (PremiumManager.SKU_AUTO_CONNECT.equals(sku)) {
        Preference pref;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
            ///WHAAAAAAAAAAAAAAAT?;
        else
        pref = findPreference(getString(R.string.preference_autoconnect));
        pref.setEnabled(isPurchased);
    }

}

在ICS平板电脑上调用findPreference会返回null,因此会抛出NPE。在Preference Screen中使用片段时,如何检索首选项对象?

0 个答案:

没有答案