Intereting Posts
Могу ли я заставить приложение запускать камеру по умолчанию, а не предлагать список «Полное действие с помощью»? Каков правильный способ указать действие намерения в файле манифеста? Как удалить (Android) строку заголовка приложения в Xamarin.Forms? Android-экранная клавиатура скрывает Python Kivy TextInputs Multi-touch два пальца краны R.raw.any ничего нельзя разрешить Android listview больше не выделяет выделение onclick Почему ContextThemeWrapper теперь ограничен группой поддержки? Интеграция ткани с Libgdx Нужна помощь при загрузке в фоновом режиме на Android? Сплит-панель действий – перекрытие значков при использовании андроида: showAsAction = "always" Resource.designer.cs НЕ регенерируется в моно (Xamarin Studio) Eclipse: adt не смог создать экземпляр класса com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor Несколько экземпляров Android SDK Build-Tools, Bug или Feature? Последовательное подключение к USB-приложению с помощью устройства работоспособности

Прокрутка до / установка позиции настроек пользовательского списка.

У меня есть пользовательский параметр preferencefragment, который содержит две пользовательские команды listpreferences. Из-за динамического характера этих двух списков каждый раз, когда загружается родительский фрагмент, я обновляю эти два фрагмента, создавая новый экземпляр пользовательского параметра preferencefragment:

if(themeListFragment != null) { themeListFragment = new ThemeListFragment(); //init fragment getFragmentManager().beginTransaction() .replace(R.id.themeFragmentCont, themeListFragment) .commit(); } 

Это отлично работает и отображает настройки пользовательского списка. Каждый из этих двух параметров списка определяется пользовательской функцией listpreference:

 //setup themes list if(lp == null) { lp = (ThemeListPreference) findPreference("theme_list"); lp.setOnPreferenceChangeListener(this); refreshThemes(); } 

Моя пользовательская команда listpreference в основном используется для выполнения некоторых операций перед созданием диалогового окна, поэтому он переопределяет этот метод:

 @Override protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { int index = preferences.getInt(getContext().getString(R.string.theme_id),getContext().getResources().getInteger(R.integer.default_theme_id)); System.out.println(index); ListAdapter listAdapter = new ThemeListAdapter(getContext(), R.layout.image_list_row, this.getEntries(), themes, index, this); builder.setAdapter(listAdapter, this); super.onPrepareDialogBuilder(builder); } 

Все работает отлично от начала и до конца, но когда списки получаются достаточно длинными, прокрутка становится проблемой, поскольку всплывающее окно списка не выполняет автоматическую прокрутку к выбранному элементу предпочтения.

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

В ListPreference используется AlertDialog.Builder.setSingleChoiceItems() , которые обеспечивают отображение текущего выбранного элемента. Итак, в вашем случае замените

 builder.setAdapter(listAdapter, this); 

с:

 builder.setSingleChoiceItems(listAdapter, index, this);