我的方案很简单:我的偏好设置之一是仅在用户购买了应用内商品时激活的高级功能。
我有一个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中使用片段时,如何检索首选项对象?