我的三星平板电脑上的偏好设置存在问题,但手机却没有,可能与上下文有关?

时间:2018-09-04 08:16:37

标签: android sharedpreferences android-context samsung-mobile

我有一个可以在手机上正常运行的应用程序(华为Mate 10 Pro),但平板电脑上有问题(三星Galaxy Tab S2)。我以前曾就一个问题而不是另一个问题发布了一个不同的问题,但是这个问题是完全独立的。

我使用首选项屏幕保存一些设置。这些设置之一(唯一ID)仅显示,但可以通过单击将其复制,否则只能由应用本身处理。一切都可以在手机上正常运行,但是部分代码似乎无法在平板电脑上运行(该值在此处为空)。由于代码相同,因此在设备之间必须以不同的方式进行处理。我不确定,但是可能是上下文吗?

要遵循的几个代码段。

在我的PrefFregment中,可在两种设备上使用:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.app_settings);
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

    getPreferenceScreen().findPreference("UID").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
            Context context = preference.getContext();
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
            String uid = prefs.getString("UID", "");
            uid = uid.trim();
            ClipboardManager clipboardManager = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("UID",uid);
            clipboardManager.setPrimaryClip(clip);
            Toast.makeText(context,R.string.UIDtoast, Toast.LENGTH_LONG).show();
            return true;
        }
    });
}

我的PrefFragment中的另一个代码片段可以在我的手机上使用,但不能在平板电脑上使用:

private void updatePreference(Preference preference) {
        preference.setSummary(PreferenceManager.getDefaultSharedPreferences(preference.getContext()).getString(preference.getKey(),""));          
    }

最后一个片段,来自我的主要活动。它可以在手机上使用,但平板电脑上的uid为空:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String uid = prefs.getString("UID", "");
uid = uid.trim();

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。对于潜在的问题,我一直都是错误的。上下文仍然可以正常工作。问题是我在较早的时候就将相关的首选项从editTextPreference更改为Preference,因此不能仅对其文本进行编辑。我不得不通过编辑器输入uid值。然后一切正常。它之所以仍然起作用的原因是,自更改之前,先前的值仍存储在首选项中。当我重新安装整个应用程序时,我注意到了这一点,突然所有值都为空。我仍然不知道为什么这些设备之间会有区别。但是现在问题至少已经解决了。