Intereting Posts
Материал TabLayout не работает Filter ArrayList после преобразования Long (от конструкторов) в строку Android getDefaultSharedPreferences Как получить идентификатор устройства с JNI в Android? Android ViewPager – добавление слайд-шоу с анимацией fade-in / out для переключения между представлениями Как изменить размер изображения при нажатии Анимированная анимация Android Layout при удалении, а затем добавление одного ребенка Проблемы с совместимостью Android 4.0 с Canvas.clipPath Как Kotlin взаимодействует с Java и JavaScript? Как избежать нескольких экземпляров одной и той же Деятельности? Я работаю с Twilio android SDK, Когда я нажимаю кнопку hangup, всегда получаю ошибку, не могу отключить вызов после набора номера? Parse.com: с помощью parseUser, как я могу сохранить данные в столбце, который я создал в parse из класса? Как передать список массивов из одной активности в другую без ее запуска Nutiteq: ViewLabel: выполнение отложенной кнопки Могу ли я отключить плагин Firebase для конкретного вкуса?

Внедрение «более быстрого» backToTop – ListView

У меня есть ListView внутри фрагмента, который добавляется как вкладка внутри ViewPager. Я хочу, чтобы пользователи могли прокручивать «backToTop», просто нажав на вкладку, на которой они уже включены (onTabReselected () ). У меня уже есть рабочий код для этого; Тем не менее, код, который я использую, занимает слишком много времени, чтобы прокручивать назад до позиции 0, что довольно аккуратно в небольших списках, но в коллекции 250 песен это может раздражать пользователя.

Вот мой код:

@Override public void onTabReselected(Tab tab, FragmentTransaction ft) { switch (tab.getPosition()) { case 0: if (tab.getPosition() == mCurPagerItem) { final ListView list = (ListView) findViewById(android.R.id.list); list.smoothScrollToPosition(0); } break; case 1: if (tab.getPosition() == mCurPagerItem) { final GridView list = (GridView) findViewById(R.id.artist_grid); list.smoothScrollToPosition(0); } break; case 2: if (tab.getPosition() == mCurPagerItem) { final ExpandableListView list = (ExpandableListView) findViewById(R.id.exp_list); list.smoothScrollToPosition(0); } break; default: break; } } 

Когда я переключаюсь между позициями, так как мои разные фрагменты имеют разные типы «списка». Как я уже сказал, этот код работает очень хорошо, но есть ли более быстрый способ прокрутки назад? Что-то более мгновенное.

И только для того, чтобы уточнить, когда я говорю, что это «занимает слишком много времени», это потому, что smoothScrollToPosition сам по себе является медленным способом прокрутки списка, предположительно, чтобы сделать его более приятным.

Примечание. Я попытался:

 list.scrollTo(0, 0); 

Но это фактически не похоже на текущую позицию listView. Я полагаю, что это скорее вызов View, а метод ListView.

Есть идеи?

Попробуйте вызвать setSelection() , он не выполняет анимацию:

 list.setSelection(0); 
 int position = 10; // 10 or other if (list.getFirstVisiblePosition() > position) { list.setSelection(position); list.smoothScrollToPosition(0); } else { list.smoothScrollToPosition(0); } 

Обновлено: 2013-10-27. Начиная с уровня API 11, вы можете использовать smoothScrollToPositionFromTop (int position, int offset, int duration)