Вопрос по android, android-viewpager, button, navigation – Android ViewPager Предыдущая / Следующая кнопка

38

Итак, я разрабатываю приложение для Android, которое использует ViewPager для отображения страниц.

На каждой странице у меня есть набор кнопок для навигации по страницам (в дополнение к просмотру страниц). Эти кнопки предназначены для «первой страницы», «предыдущей страницы», «следующей страницы»; и "последняя страница".

То, что я не могу понять, как это сделать, - это разработать механизм, позволяющий изменять страницы одним нажатием кнопки.

У кого-нибудь есть идеи?

ETA: чтобы лучше объяснить настройку, кнопки объявляются в макете каждой страницы и надуваются вместе с остальным макетом в PagerAdapter. Моя проблема в том, что я не могу ссылаться на ViewPager из PagerAdapter. Или, по крайней мере, я не могу придумать, как это сделать.

Что ж. Это было четыре года назад, и у меня нет кода под рукой. Больше даже не работаю на компанию. Yoda
Но я думаю, что сделал что-то вроде наличия mViewPager в качестве переменной класса, а не локальной. Я основал эту часть проекта на одном из 2.5 примеров проектов, так что вы можете найти что-то похожее, чтобы помочь. После этого я модернизировал проект, чтобы использовать версию 4.0, которая, насколько я помню, была совершенно другой. Yoda
У меня та же проблема (я не знаю, как ссылаться на ViewPager из PagerAdapter), и ответ Accepted не отвечает ни тому, ни другому (просто используетmViewPager без уточнения что это). Итак, как ты заставил это работать? Yankee

Ваш Ответ

7   ответов
-4
public void onClick(View v) {
     int currentItem = mViewPager.getCurrentItem();
     mViewPager.setCurrentItem(currentItem+1); //(currentItem-1)
}

only this code in button click: @Override

getcurrentitem фактический элемент вviewpagerследующий пунктcurrentItem + 1

3

1) Сделать макет

      <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:background="@color/white"
                android:weightSum="1">



                <android.support.v4.view.ViewPager
                    android:id="@+id/images_pager"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    >
                </android.support.v4.view.ViewPager>

                <ImageView
                    android:id="@+id/img_next"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:src="@drawable/forward_white"
                    android:background="@color/colorPrimary"
                    android:layout_centerVertical="true"
                    android:layout_alignParentRight="true"
                    android:layout_marginRight="5dp"
                    android:paddingTop="5dp"
                    android:paddingBottom="5dp"
                    />


                <ImageView
                    android:id="@+id/img_previous"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:src="@drawable/back_white"
                    android:background="@color/colorPrimary"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="5dp"
                    android:layout_alignParentLeft="true"
                    android:paddingTop="5dp"
                    android:paddingBottom="5dp"/>


            </RelativeLayout>

2) Установите пользовательский адаптер

        CustomViewPagerAdapter  custompageradpter;
        ViewPager   mViewPager;
        mViewPager = (ViewPager)shareImagesDialouge.findViewById(R.id.images_pager); 
         custompageradpter = new CustomViewPagerAdapter(this);
         mViewPager.setAdapter(custompageradpter);

    public class CustomViewPagerAdapter  extends PagerAdapter {


        Context mContext;
        LayoutInflater mLayoutInflater;

        int[] mResources = {
                R.drawable.emoji_1,
                R.drawable.emoji_2,
                R.drawable.emoji_3,
                R.drawable.emoji_4,
                R.drawable.emoji_5,
                R.drawable.emoji_6
        };

      ,  public CustomViewPagerAdapter(Context context) {
            mContext = context;
            mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return mResources.length;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((LinearLayout) object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);

            ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
            imageView.setImageResource(mResources[position]);

            container.addView(itemView);

            return itemView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((LinearLayout) object);
        }

    }

3) Для следующей и предыдущей кнопки

         case R.id.img_previous:
                    mViewPager.setCurrentItem(getItemofviewpager(-1), true);
                    break;

                case R.id.img_next:
                    mViewPager.setCurrentItem(getItemofviewpager(+1), true);
                    break;

4) Сделать эту функцию

  private int getItemofviewpager(int i) {
        return mViewPager.getCurrentItem() + i;
    }
Ответы, содержащие только код, не поощряются, так как они не предоставляют много информации для будущих читателей. Пожалуйста, дайте некоторое объяснение тому, что вы написали.
2

Безотказное обновление доsweggersen & APOS; s а такжеАлекс Орлов ответ,

// For scrolling to next item
nextPageButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        viewPager.setCurrentItem(getNextPossibleItemIndex(1), true);
    }
});

// For scrolling to previous item
previousPageButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        viewPager.setCurrentItem(getNextPossibleItemIndex(-1), true);
    }
});

Добавьте метод getNextPossibleItemIndex () в свой Activity / Fragment,

private int getNextPossibleItemIndex (int change) {

    int currentIndex = viewPager.getCurrentItem();
    int total = viewPager.getAdapter().getCount();

    if (currIndex + change < 0) {
        return 0;
    }

    return Math.abs((currentIndex + change) % total) ;
}

Таким образом, вы сможете изменить currentItem, не беспокоясь об IndexOutOfBoundsExceptionв соответствии с предложением Генриха, Обратите внимание, что при использовании этого метода элементы будут отображаться в виде кругового списка.

1 -> 2 -> 3 -> 1 -> 2 -> 3 -> 1

Но возвращаясь, он остановится на первом пункте

1 <- 1 <- 2 <- 3
92

Кнопка:

Button yourButton = (Button)findViewById(R.id.button1);
    yourButton.setOnClickListener(new OnClickListener() {

     @Override
           public void onClick(View view) {
               mViewPager.setCurrentItem(getItem(+1), true); //getItem(-1) for previous
           }
        });

Функция:

private int getItem(int i) {
       return mViewPager.getCurrentItem() + i;
}

Надеюсь это поможет :)

Это броситIndexOutOfBoundsExceptionс, так как нет проверки текущей позиции.
1

Update code

Button preButton = (Button)findViewById(R.id.pre_button);
        Button nextButton = (Button)findViewById(R.id.next_button);

        preButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mViewPager.setCurrentItem(mViewPager.getCurrentItem()-1, true); 


            }
        });

        nextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1, true); 

            }
        });
44
yourButton.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View view) {
      yourViewPager.setCurrentItem(page, smoothScroll);
   }
});
Я изучил это, и это была моя первоначальная мысль. Но кнопки объявляются в макетах, которые надуваются внутри адаптера, который не может ссылаться на сам объект ViewPager ... Yoda
Затем создайте пользовательский адаптер и передайте viewPager как переменную? или еще лучше передать пользовательский прослушиватель событий.
страница - это yourViewPager.getCurrentItem + -1, smoothScroll имеет значение true.
@DennisJaamann Можете ли вы сказать мне в ответ, как это сделать или дать ссылку? Я нуб
Что такое страница и smoothScroll?
3

Я закончил этот проект с этим кодом.

vPager = (ViewPager) findViewById(R.id.viewpager);
    View tempView1 = inflater.inflate(R.layout.ani_dialog1, null);
    firstView = (ImageView) tempView1.findViewById(R.id.ani_dialog_next);
    views.add(tempView1);
    firstView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            vPager.setCurrentItem(1, true);

        }
    }); 
Это броситIndexOutOfBoundsExceptionс, так как нет проверки текущей позиции.
Почему всегда пункт 1? Хорошо, что вы сохранили & quot; // TODO Автоматически сгенерированный метод заглушки & quot; в коде

Похожие вопросы