Начальная позиция PagerAdapter
Я использую следующий пример для внедрения моего viewPager:
http://code.google.com/p/viewpagerexample/issues/list
Проблема с этим примером заключается в том, что я не могу понять, как установить начальную позицию, начальная позиция по умолчанию равна 0. В принципе, я не могу контролировать, есть ли доступный вид слева или право.
Есть ли способ управления центром Посмотреть текущую позицию? есть ли лучший способ сделать это?
возможно ли сделать его круговым?
Ответы
Ответ 1
Я нашел способ установить его положение, которое выполняется вне класса:
awesomePager = (ViewPager) findViewById(R.id.awesomepager);
awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);
и его можно ограничить, вычислив количество элементов, которые я хочу в него вставить
Ответ 2
Я заметил, что если вы обновите Activity (изменение ориентации) с помощью ViewPager, имеющего FragmentStatePagerAdapter, тогда Адаптер снова будет использовать его Фрагменты. Способ остановить это:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
if (viewPager != null) {
// before screen rotation it better to detach pagerAdapter from the ViewPager, so
// pagerAdapter can remove all old fragments, so they're not reused after rotation.
viewPager.setAdapter(null);
}
super.onSaveInstanceState(savedInstanceState);
}
но затем после Activity Activity ViewPager alwayes открывает страницу 0 сначала и setCurrentItem (CurrentPosition); не работает. Исправлено для этого изменение страницы после задержки:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(newPosition);
}
}, 100);
Ответ 3
Чтобы начать с последнего фрагмента, я сделал следующее:
PagerAdapter pagerAdapter = new PagerAdapter();
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(pagerAdapter.getCount() - 1);
Ответ 4
Я столкнулся с проблемой: если я установил текущий элемент до того, как я установил адаптер, первый элемент, который я верну, всегда будет в положении 0.
Убедитесь, что вы сделали:
awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);
и не:
awesomePager.setCurrentItem(CurrentPosition);
awesomePager.setAdapter(awesomeAdapter);
Ответ 5
У меня есть массив размером более 1000, а в dymanic viewpager я столкнулся с левым сцепом, застрявшим на первой загрузке. В приведенном ниже кодере это было решено и привело к плавной прокрутке:
@Override
onResume(){
super.onResume();
viewPager.setCurrentItem(newPosition);
}
Ответ 6
Я использую 3 фрагмента и при запуске приложения по умолчанию будет показан второй (средний) фрагмент. Просто я использую функцию onResume, и все отлично работает.
@Override
protected void onResume() {
super.onResume();
m_viewPager.setCurrentItem(1);
}
Ответ 7
Я столкнулся с той же проблемой.
Когда я инициализирую ViewPager, позиция индикатора равнялась 0.
Это может зависеть от количества вычислений для содержимого пейджера. Я использую ViewTreeObserver, как показано ниже.
mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mViewPager.setCurrentItem(newPosition);
removeOnGlobalLayoutListener(mSlidingTabLayout.getViewTreeObserver(), mGlobalLayoutListener);
}
};
mSlidingLayout.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);
и
private void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener) {
if (observer == null) return;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
observer.removeGlobalOnLayoutListener(listener);
} else {
observer.removeOnGlobalLayoutListener(listener);
}
}
Таким образом, также никогда не беспокоиться о настройке времени задержки.
Ответ 8
@Override
public Object instantiateItem(ViewGroup container, int position) {
View currentPage = null;
switch(position){
case 0:
currentPage = LayoutInflater.from(context).inflate(R.layout.page0, null)
break;
case 1:
currentPage = LayoutInflater.from(context).inflate(R.layout.page1, null)
///////////// This page will be default ////////////////////
((ViewPager)container).setCurrentItem(position);
////////////////////////////////////////////////////////////
break;
case 2:
currentPage = LayoutInflater.from(context).inflate(R.layout.page2, null)
break;
return currentPage;
}
Ответ 9
Использование viewPager.setCurrentItem(newPosition);
показывает пользователю переход от начальной страницы к newPosition
, чтобы этого не происходило, и отображал newPosition
напрямую, как если бы это была начальная точка, я добавил false
ко второму параметру что-то как это:
int newPosition = pages.size()-1; // Get last page position
viewPager.setCurrentItem(newPosition, false); // 2nd parameter (false) stands for "smoothScroll"