Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 共享首选项不';单击“首选项”后才能生效_Java_Android_Sharedpreferences_Sony_Sony Smartwatch - Fatal编程技术网

Java 共享首选项不';单击“首选项”后才能生效

Java 共享首选项不';单击“首选项”后才能生效,java,android,sharedpreferences,sony,sony-smartwatch,Java,Android,Sharedpreferences,Sony,Sony Smartwatch,我正在为Sony Smartwatch编写一个应用程序,使用他们的SDK。以下是主要活动的一部分: class SmartTickerActivity extends ControlExtension { private Handler mHandler; SmartTickerActivity(final String hostAppPackageName, final Context context, Handler handler) { super(con

我正在为Sony Smartwatch编写一个应用程序,使用他们的SDK。以下是主要活动的一部分:

class SmartTickerActivity extends ControlExtension {
    private Handler mHandler;

    SmartTickerActivity(final String hostAppPackageName, final Context context, Handler handler) {
        super(context, hostAppPackageName);

        if (handler == null) {
            throw new IllegalArgumentException("handler == null");
        }

    }

    @Override
    public void onStart() {
        //do some stuff

        PreferenceManager.setDefaultValues(mContext, R.xml.preference, false);
    }
public class MyPreferenceActivity extends PreferenceActivity {

    private OnSharedPreferenceChangeListener mListener = new OnSharedPreferenceChangeListener() {

        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            Preference pref = findPreference(key);

            if (pref instanceof ListPreference) {
                ListPreference listPref = (ListPreference) pref;
                pref.setSummary(listPref.getEntry().toString());
            }

            if (pref instanceof EditTextPreference) {
                EditTextPreference editTextPref = (EditTextPreference) pref;
                pref.setSummary(editTextPref.getText().toString());
            }

        }

    };  

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preference);  

    setSummaries();

    setTypeface(SmartTickerActivity.mainLayout);

    if (previewLayout != null) setTypeface(previewLayout);

    // Handle read me
    Preference readMe = findPreference(getText(R.string.preference_key_read_me));
    readMe.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        public boolean onPreferenceClick(Preference readMe) {
            showDialog(DIALOG_READ_ME);
            return true;
        }
    });

    // Handle about
    Preference about = findPreference(getText(R.string.preference_key_about));
    about.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        public boolean onPreferenceClick(Preference about) {
            showDialog(DIALOG_ABOUT);
            return true;
        }
    });

     // Handle preview
        Preference preview = findPreference(getText(R.string.preference_key_preview_dialog));
        preview.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            public boolean onPreferenceClick(Preference preview) {
                showDialog(DIALOG_PREVIEW);
                return true;
            }
        });      

    }
问题在于,当应用程序启动时,保存的首选项没有应用到Smartwatch上。XML中的默认首选项值也是如此。但是,如果我在手机上单击应用程序的任何首选项,保存的首选项值将立即应用于Smartwatch

注意,主类没有onCreate()方法,这让我陷入了一个循环

以下是偏好活动的一部分:

class SmartTickerActivity extends ControlExtension {
    private Handler mHandler;

    SmartTickerActivity(final String hostAppPackageName, final Context context, Handler handler) {
        super(context, hostAppPackageName);

        if (handler == null) {
            throw new IllegalArgumentException("handler == null");
        }

    }

    @Override
    public void onStart() {
        //do some stuff

        PreferenceManager.setDefaultValues(mContext, R.xml.preference, false);
    }
public class MyPreferenceActivity extends PreferenceActivity {

    private OnSharedPreferenceChangeListener mListener = new OnSharedPreferenceChangeListener() {

        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            Preference pref = findPreference(key);

            if (pref instanceof ListPreference) {
                ListPreference listPref = (ListPreference) pref;
                pref.setSummary(listPref.getEntry().toString());
            }

            if (pref instanceof EditTextPreference) {
                EditTextPreference editTextPref = (EditTextPreference) pref;
                pref.setSummary(editTextPref.getText().toString());
            }

        }

    };  

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preference);  

    setSummaries();

    setTypeface(SmartTickerActivity.mainLayout);

    if (previewLayout != null) setTypeface(previewLayout);

    // Handle read me
    Preference readMe = findPreference(getText(R.string.preference_key_read_me));
    readMe.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        public boolean onPreferenceClick(Preference readMe) {
            showDialog(DIALOG_READ_ME);
            return true;
        }
    });

    // Handle about
    Preference about = findPreference(getText(R.string.preference_key_about));
    about.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        public boolean onPreferenceClick(Preference about) {
            showDialog(DIALOG_ABOUT);
            return true;
        }
    });

     // Handle preview
        Preference preview = findPreference(getText(R.string.preference_key_preview_dialog));
        preview.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            public boolean onPreferenceClick(Preference preview) {
                showDialog(DIALOG_PREVIEW);
                return true;
            }
        });      

    }

我在Android开发方面相当缺乏经验,所以问题很可能与Sony SDK无关。有人能帮忙吗?

您是对的,在首次显示PreferenceActivity之前,不会加载官方示例扩展的首选项。如果在访问首选项时使用了正确的默认值,这应该不是问题

如果希望在第一次启动扩展时加载首选项,可以扩展android.app.Application类和onCreate方法

例如:

public class MySmartWatchApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        PreferenceManager.setDefaultValues(this, R.xml.app_preferences, false);
    }
}

非常感谢。就像我想的那样。我在清单的一部分添加了新的应用程序类名,现在我可以通过抓取应用程序实例的上下文从任何方法获取首选项。完美的