我的场景很简单:我的偏好之一是仅在用户购买了应用内产品时才激活的高级功能。
我有一个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);
}
}
调用findPreference
ICS 平板电脑返回 null,因此抛出 NPE。在首选项屏幕中使用片段时如何检索首选项对象?