Неограниченный / Динамический ViewPager в обоих направлениях

Есть один вариант использования I 'ViewPagerникогда не видел, чтобы он был реализован

ViewPager более или менее статическая структура. Это'Нетрудно добавить страницы в правую часть (добавление к модели и ее отображение), однако, должно быть удобное решение для расширения PagerAdapter (или его части).с подклассами), поэтому он может расширяться в обоих направлениях.

Я могу представить интерфейс для адаптера, как это

boolean isEmpty()
boolean hasNext()
boolean hasPrevious()
Object  getNext()
Object  getPrevious()
Object  getItem(int position)

// or if using generics
T       getNext()
T       getPrevious()
T       getItem(int position)

Похож на Итератор Коллекций, но в обоих направлениях.

Где индекс / позиция не ограничен снизу 0, но может использовать весь диапазон типа Integer.

Может быть, не основывать реализацию на массиве (от 0 до бесконечности) .I '

мы нашли это "взломать ":динамически добавлять и удалять вид в пейджер

Но, как я уже говорил, яя пытаюсь заставить его работать естественным образом, не поддерживая 3,5, ... элементов и вынуждая ViewPager изменить текущую позицию, основываясь на некоторой запутанной логике

Есть ли в настоящее время какая-либо достаточная реализация или это необходимо реализовать?

Я готов за вознаграждение ответить, если это будет совершенно новая реализация.

 Aleks G21 мая 2013 г., 11:17
Я только что посмотрел на код DayView.java из Календаря Android - очевидно, они не используют ViewPager, а вместо этого управляют прокруткой вручную. Так много для этой идеи.
 Pragnani16 мая 2013 г., 11:41
Мы можем добавить любое количество просмотров в ViewPager. И я реализовал то же самое в одном из моих приложений. Взгляните на @FoamyGuy Простая демонстрация ViewPager, в которой мы можем иметь неограниченное количество страницgithub.com/FoamyGuy/MathFactCards
 Michał Z.21 мая 2013 г., 11:23
Это'не так уж плохо, я думаю, что я видел @Romain Guy 's сообщение где-то, в котором он посоветовал это решение. Но я понимаю, что вы хотите иметь более элегантное решение. Так что IMO единственный способ - расширить ViewPager и добавить его.
 Marek Sebera21 мая 2013 г., 11:06
@AleksG хороший вопрос, исследовать и, возможно, придумать ответ? :-)
 Michał Z.21 мая 2013 г., 10:58
Это не проблема, просто поместите элементы MAX_INT и установите текущую позицию посередине. Это похоже на бесконечный прокручиваемый пейджер, но вопрос не в этом. Автор хочет "более элегантный решение.
 Marek Sebera21 мая 2013 г., 11:05
@ МихалЗ. это 'что япытаюсь избежать, так как это грязный хак
 TheFlash16 мая 2013 г., 11:42
@Pragnani вы можете добавить неограниченное количество страниц, но только в 1 направлении. Я думаю, что его вопрос другой.
 Marek Sebera16 мая 2013 г., 11:42
@ Прагнани, но тыЯ расширяюсь только в правильном направлении, яЯ пытаюсь получить в обоих направлениях динамически, без взломов.
 Pragnani16 мая 2013 г., 11:45
@MarekSebera Нашел в последнее время ...
 Aleks G21 мая 2013 г., 10:55
Интересно, как Google Calendar внедрен? Он выглядит как пейджер с неограниченным просмотром, так как вы можете перемещаться влево и вправо, прокручивая дни.

Ответы на вопрос(2)

Решение Вопроса

Поможет ли это,

public static class MyAdapter extends FragmentPagerAdapter {
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public Fragment getItem(int position) {
        return getFragmentBasedOnPosition(position);
    }

    private Fragment getFragmentBasedOnPosition(int position) {
        int fragmentPos = position % 3; // Assuming you have 3 fragments
        switch(fragmentPos) {
            case 1:
            return Fragment1.newInstance();
            case 2:
            return Fragment2.newInstance();
            case 3:
            return Fragment3.newInstance();
        }
    }
}

а потом,

mPager.setCurrentItem((int)(Integer.MAX_VALUE/2)); // при условии, что mPager - ваш ViewPager

 Marek Sebera28 мая 2013 г., 10:27
Это как-то поможет, спасибо, но все же мне кажется странным решением.
 Hrk04 мая 2015 г., 13:26
Это победилоработать с FragmentStatePagerAdapter, так как он должен будет вычислять каждый фрагмент. и привести к переполнению памяти

Использование стендов отрицательных значенийочень далеко от естественного порядка использования ViewPager и вообще не является проблемой с адаптером. Пожалуйста, ознакомьтесь с исходным кодом ViewPager в исходном пакете поддержки в Android SDK. Например, вот частная реализация setCurrentItemInternal:

void setCurrentItemInternal(int item, boolean smoothScroll, boolean always, int velocity) {
    if (mAdapter == null || mAdapter.getCount()  (mCurItem + pageLimit) || item < (mCurItem - pageLimit)) {
        // We are doing a jump by more than one page.  To avoid
        // glitches, we want to keep all current pages in the view
        // until the scroll ends.
        for (int i=0; i
 kaushal trivedi21 мая 2013 г., 13:51
Вы можете сделать его круглым в обоих направлениях и создать эффект, как будто есть неограниченное количество страниц. В то же время измените содержимое пейджера представления в следующих или предыдущих слотах тиража, как для первых 5 страниц контента будет что-то, для следующих 5 контента будут внесены изменения, для последних 5 контента получат изменения из истории, вы должны вести историю для каждого слот (5 страниц).
 Marek Sebera21 мая 2013 г., 12:42
И каков вывод? Я не'Я не хочу использовать отрицательные индексы. Мне нужно проходить коллекцию в обоих направлениях без ограничений, основываясь на моей пользовательской модели. Я прямо сказал, что решение, вероятно, не должно основываться на массиве, так как нам придется иметь дело с отрицательными индексами.
 Marek Sebera21 мая 2013 г., 13:38
Я нене думаю, что тыВерно, свяжитесь по адресу [email protected], яПопробую более подробно остановиться, но здесь нет места для такой дискуссии.
 alexei burmistrov21 мая 2013 г., 12:53
Вы написали: "Где индекс / позиция не ограничен снизу 0, но может использовать весь диапазон типа Integer. " Где вы хотите использовать эти индексы? Если в get / set текущая страница или обработчик onChange, то проблема выше. Если отрицательные индексы не видны ViewPager, что означаетимеющий такой индекс? Пожалуйста, дополните...
 alexei burmistrov21 мая 2013 г., 13:25
Поэтому, если я правильно понимаю, вопрос можно было бы сократить до обычного List с помощью метода getModelPostion (item) и расширения List.add с помощью кода, обновляющего отображение positon-modelPosition. Я прав?
 Marek Sebera25 мая 2013 г., 10:59
@kaushaltrivedi О, это, наверное, стоит попробовать, можете ли вы добавить это как пример с примером? Спасибо
 Marek Sebera21 мая 2013 г., 13:08
Я говорил о диапазоне возможных элементов, в схеме интерфейса я неМне не нужны индексы, но мне нужно динамически расширять коллекцию в обоих направлениях. Так что вызов getPreviousItem нев конечном итоге на элемент (0), но зависит от некоторых других условий, реализованных в пользовательской модели.

Ваш ответ на вопрос