Подтвердить что ты не робот

Начальная позиция PagerAdapter

Я использую следующий пример для внедрения моего viewPager: http://code.google.com/p/viewpagerexample/issues/list

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

Есть ли способ управления центром Посмотреть текущую позицию? есть ли лучший способ сделать это? возможно ли сделать его круговым?

4b9b3361

Ответ 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"