假设我有一个密钥@"MyPreference",通过NSUserDefaults存储相应的值.
修改值时有没有办法通知?
或者可以通过绑定来完成?(但是这种情况下,我不希望将值绑定到UI元素,而是希望我的对象被通知更改,以便我可以执行其他任务.)
我知道可以观察到NSUserDefaultsDidChangeNotification,但这似乎是一种全有或全无的方法,并且似乎没有一种机制来获取被修改的特定键值对.(随意纠正.)
我们在一些应用程序中使用Java首选项,并没有真正注意到这一点,因为调用的实用程序相当陈旧并且是在Windows XP中编写的.但似乎Java首选项不再存储在Windows 7的注册表中 - 或者它们存储在不同的地方.
我期待它在:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs
但我不认为那里.
更糟糕的是,当我运行这个应用程序时:
public static void main( final String[] args ) throws BackingStoreException {
Preferences systemRoot = Preferences.systemRoot();
Preferences preferences = systemRoot.node( "com/mycompany/settings" );
systemRoot.put( "foo", "bar" );
systemRoot.put( "baz", "lolz" );
System.out.println( "-------------------------------" );
String[] keys = preferences.keys();
for( String key : keys ) {
System.out.println( key );
}
System.out.println( "-------------------------------" );
keys = systemRoot.keys();
for( String key : keys ) {
System.out.println( key );
}
}
Run Code Online (Sandbox Code Playgroud)
它实际写(我可以评论推出并再次运行它,它的工作原理)但我没有在注册表中看到新的密钥.
此外,我似乎无法在任何地方看到这一点.提前致谢.
编辑#1重要的唯一原因是设置的变化取决于它运行的环境.这就是说,通过手动插入注册表项然后进行一些检查来模拟该环境通常很有用.
我是以管理员身份运行的,但我没有在注册表中看到我期望它们的密钥.
我已经看到两种不同的方法来保存用户首选项.
方法1: 序列化它们并保存在USERS表的一列中
方法2: 创建一个单独的表PREFERENCES并从USERS到PREFERENCES建立一个has_many关联.
您更喜欢上述两种方法中的哪一种,以及每种方法的优缺点是什么?
在Windows上,您在应用程序中从java.util.prefs.Preferences访问的Java首选项存储在注册表中.哪些存储在Mac OS X上?
我正在使用Android应用程序ActionBarSherlock.我的问题是制作首选屏幕.在onBuildHeader()对方法SherlockPreferenceActivity类nerver调用.
这是我的代码
preference_headers.xml
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
<header
android:fragment="package.fragments.MyPreferenceFragment"
android:icon="@drawable/bulle"
android:summary="An example of some preferences."
android:title="title" />
</preference-headers>
Run Code Online (Sandbox Code Playgroud)
的preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/options" >
<PreferenceCategory>
<SwitchPreference
android:id="@+id/cb_notif"
android:defaultValue="false"
android:key="com.vincent.HTC_Dev.pref.notif"
android:summaryOff="@string/notifications_off"
android:summaryOn="@string/notifications_on"
android:title="@string/notifications" />
</PreferenceCategory>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
MyPreferenceActivity
public class MyPreferenceActivity extends SherlockPreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
Run Code Online (Sandbox Code Playgroud)
MyPreferenceFragment
public class MyPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override …Run Code Online (Sandbox Code Playgroud) 我创建了一个Android的动态壁纸,我试图让用户选择从他们的手机图像并把它作为背景图像,但是当我发起的活动,开始有意挑选图片,我的共享偏好唐好像保存得当.
下面是我当用户按下优选项按钮,我开始活动的onCreate方法,并获得设备上的图像的路径onActivityResult(一切似乎工作).提交首选项后的println什么都没打印出来.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PICTURE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
preferences.edit().putString(SETTINGS_BACKGROUND_IMAGE, "okok");
preferences.edit().commit();
System.out.println("Image" + preferences.getString(SETTINGS_BACKGROUND_IMAGE, ""));
}
}
finish();
}
Run Code Online (Sandbox Code Playgroud) 我需要以编程方式删除PreferenceCategory.我可以使用以下代码删除个人首选项,但我还需要删除(禁用)整个PreferenceCategory.
PreferenceScreen preferenceScreen = getPreferenceScreen();
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference("pref22");
((PreferenceGroup) findPreference("prefcat")).removePreference(etp);
Run Code Online (Sandbox Code Playgroud)
编辑:这是PreferenceCategory"prefcat"和子偏好"pref22"的工作代码:
PreferenceScreen preferenceScreen = getPreferenceScreen();
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference("pref22");
PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("prefcat");
if (preferenceGroup != null) {
preferenceGroup.removePreference(etp);
preferenceScreen.removePreference(preferenceGroup);
}
Run Code Online (Sandbox Code Playgroud) 每当我切换工作区/ Eclipse安装时,我都需要复制/重做首选项:
我想以统一的方式维护这些设置,最好是在源代码管理下.我怎样才能做到这一点?
我在创建新工作区时了解"复制设置",但它不会保留更新的副本.
我在Eclipse 3.6.2中的Preferences-> General-> Keys中找不到autocomplete或intellisense这个术语.
在编写代码时,我不想按Enter键选择自动完成项.我可以将Eclipse配置为使用选项卡按钮接受自动完成项吗?
找不到活动来处理Intent错误?它将如何解决.
Preference customPref = (Preference) findPreference("DataEntryScreen");
customPref
.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
Intent i = new Intent("com.scytec.datamobile.vd.gui.android.AppPreferenceActivity");
startActivity(i);
return true;
}
});
Run Code Online (Sandbox Code Playgroud) android preferences android-intent onitemclicklistener android-activity
preferences ×10
android ×4
eclipse ×2
java ×2
autocomplete ×1
cocoa ×1
intellisense ×1
macos ×1
preference ×1
settings ×1
wallpaper ×1
windows-7 ×1