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