2013-03-18 51 views
1

我使用的是sharedpreferences框架,但我在与其中一个首选项进行交互时遇到了一些麻烦。我想启用我的一个选项来重置我的应用程序。要做到这一点,我想要一个对话框出现在屏幕上的确定和取消。如果用户点击确定,我想要做一堆东西。使用偏好设置的Android sharedPreferences像按钮一样工作

我可以在使用ImageView侦听器的正常活动中编写所有这些内容。但在SharedPreferences框架中,我不知道如何添加侦听器和操作。我猜想作为额外的奖励,我还需要与当前的SharedPreferences状态进行交互?

此刻我有这样的XML

<PreferenceCategory android:title="Reset App"> 

    <Preference 
     android:title="Reset App?" 
     android:summary="Click here to reset the App to defaults." 
     android:key="resetapp" /> 

</PreferenceCategory> 


<PreferenceCategory android:title="General Settings"> 
<CheckBoxPreference 
     android:title="Enable Sounds?" 
     android:defaultValue="true" 
     android:summary="A Tick here will enable sounds throughout body-mix-ology." 
     android:key="enablesounds" /> 
<CheckBoxPreference 
     android:title="High performance Phone?" 
     android:defaultValue="false" 
     android:summary="If you have a high performance phone tick here to speed up body switching." 
     android:key="highperformancephone" /> 
    </PreferenceCategory> 

,这是我的类文件

public class Preferences extends PreferenceActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.layout.preferences); 

     //TODO 
     // act on resetapp 
     // prompt onscreen confirmation. 

    } 

    public AlertDialog createDialog() { 

     return new AlertDialog.Builder(this) 
     .setTitle("Reset App?") 
     .setMessage("Are you sure? You will wipe all data from the app.") 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       Toast.makeText(getBaseContext(), "App has been reset!", Toast.LENGTH_SHORT).show(); 
       //TODO 
       // clear DB 
       // reset sharedprefs. 
      } 
     }) 
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 

       Toast.makeText(getBaseContext(), "App was not reset", Toast.LENGTH_SHORT).show(); 

      } 
     }) 
     .show(); 

    } 


} 

回答

1

如何具有与ListPreference“你确定要这么做吗?”并使用默认的“否”列出值“是”和“否”。然后到任何像这样的 “是” 确认回应:

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
    if (key.equals("resetapp") && prefs.getString(key,"").equals("Yes")) { 
     // reset the value to "No" so that next time a preference change will be triggered 
     prefs.edit().putString(key, "No").commit(); 

     // now do your awesome reset stuff ... 
     Preference someOtherPref = findPreference(otherKey); 
     ... 
    } 
} 

不要忘了你的类定义更改为:

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener { 

并注册事件侦听:

@Override 
protected void onResume() { 
    super.onResume(); 
    getPreferenceScreen().getSharedPreferences() 
      .registerOnSharedPreferenceChangeListener(this); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    getPreferenceScreen().getSharedPreferences() 
      .unregisterOnSharedPreferenceChangeListener(this); 
}