1

我的场景很简单:我的偏好之一是仅在用户购买了应用内产品时才激活的高级功能。

我有一个PreferenceScreen既符合 pre-Honeycomb 和 post-Honeycomb Fragment 模型的模型。

示例片段

    @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);
    }

}

调用findPreferenceICS 平板电脑返回 null,因此抛出 NPE。在首选项屏幕中使用片段时如何检索首选项对象?

4

0 回答 0