0

我想SwitchPreference创建程序,setChecked不能正确工作

  1. 创建SwitchPreference编程
  2. 设置setChecked(true)
  3. 将其添加到PreferenceGroup

1和3,做工精细,但在3之后SwitchPreference未被选中并且点击切换没有作用(不能被“打开”/选中)。

这里是我的PreferenceFragment

public class MyPrefFragment extends PreferenceFragment { 
    @Override 
    public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { 

     addPreferencesFromResource(R.xml.prefs); 

     PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("pref_cat_1"); 

     SwitchPreference switchPreference = new SwitchPreference(getActivity()); 
     switchPreference.setTitle("new"); 
     switchPreference.setChecked(true); 
     switchPreference.setDefaultValue(true); 

     switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(final Preference preference, final Object newValue) { 

       Toast.makeText(getActivity(), newValue.toString(), Toast.LENGTH_SHORT).show(); 

       return false; 
      } 
     }); 

     preferenceGroup.addPreference(switchPreference); 

    } 
} 

和我PreferenceScreen

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <PreferenceCategory android:title="cat_one"> 

     <SwitchPreference 
      android:key="pref_1" 
      android:defaultValue="false" 
      android:title="fest"/> 

    </PreferenceCategory> 

    <PreferenceCategory 
     android:key="pref_cat_1" 
     android:title="category"/> 

</PreferenceScreen> 

我怎样才能在SwitchPreference正确setChecked(true)这是程序创建的?

测试项目为on Github

回答

1

SwitchPreference未被选中,并且点击切换没有效果。

在我的机器上进行检查。关于点击它后的状态,你是完全正确的。那是因为你从onPreferenceChange()回拨false

onPreferenceChange()文件:

返回:真正更新与新价值偏好的状态。

因此,我只是将false更改为true,它按预期工作。

编辑

我跑API 25平板电脑模拟器。然后在API 22模拟器上运行,但它不起作用。这很奇怪,它只能在API 25上按预期运行。

+0

你是对的,在API 25工作。奇怪的确... – FWeigl

+0

@Ascorbin你有没有最终得到这个工作在较低的API水平? –

+0

@ForrestBice没有。 – FWeigl