Проблема с настройками на моем планшете Samsung, но не на моем телефоне, возможно, это связано с контекстом? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть приложение, которое отлично работает на моем телефоне (Huawei Mate 10 Pro), но у меня проблемы с планшетом (Samsung Galaxy Tab S2). Ранее я уже писал другой вопрос, касающийся вопросов, касающихся одного, а не другого, но этот вопрос совершенно отдельный.

Я использую экран настроек, чтобы сохранить некоторые настройки. Один из этих параметров (уникальный идентификатор) отображается только, но его можно скопировать, щелкнув по нему, в противном случае он обрабатывается только самим приложением. Все работает так же, как и на моем телефоне, но некоторые части кода, кажется, не работают на моем планшете (значение там пусто). Поскольку код идентичен, что-то должно обрабатываться по-разному между устройствами. Я не уверен, но может ли это быть контекстом?

Несколько следующих фрагментов кода.

Из моего 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 голосов
/ 05 сентября 2018

Я решил эту проблему. Я был неправ все время относительно основной проблемы. Контекст работал нормально, как это было. Проблема заключалась в том, что ранее я изменил рассматриваемое предпочтение с editTextPreference на просто предпочтение, и поэтому его текст нельзя было просто отредактировать. Вместо этого мне пришлось ввести значение uid через редактор. Тогда все заработало. Причина, по которой это все-таки сработало, заключалась в том, что предыдущее значение все еще сохранялось в предпочтении еще до изменения. Я заметил это, когда переустановил все приложение, и вдруг все значения стали пустыми. Я до сих пор не знаю, почему была разница между устройствами. Но теперь сам вопрос решен как минимум.

...