Intereting Posts

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

У меня есть пользовательский параметр 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 и просто сделать гладкую прокрутку (или подобное), чтобы перейти к правильному элементу списка. Однако в моем случае нет идентификатора списка, поэтому я не могу ссылаться на него (по крайней мере, из моих ограниченных знаний). Есть ли способ сделать это?

Solutions Collecting From Web of "Прокрутка до / установка позиции настроек пользовательского списка."

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

 builder.setAdapter(listAdapter, this); 

с:

 builder.setSingleChoiceItems(listAdapter, index, this);