it-swarm.com.de

Android ViewPager Prev / Next Button

Okay, also entwickle ich eine Android App, die einen ViewPager zum Anzeigen von Seiten verwendet.

Innerhalb jeder Seite habe ich eine Reihe von Schaltflächen zum Navigieren zwischen Seiten (zusätzlich zum Streichen zwischen Seiten). Diese Schaltflächen stehen für "Erste Seite", "Vorherige Seite", "Nächste Seite" und "Letzte Seite".

Was ich nicht herausfinden kann, wie man es macht, ist einen Mechanismus zu konstruieren, um einen Seitenwechsel auf Knopfdruck zu ermöglichen.

Hat jemand irgendwelche Ideen?

ETA: Um das Setup besser zu erläutern, sind die Schaltflächen im Layout jeder Seite deklariert und im PagerAdapter mit dem restlichen Layout überfüllt. Mein Problem ist, dass ich im PagerAdapter nicht auf den ViewPager verweisen kann. Zumindest kann ich mir keine Möglichkeit vorstellen, das zu tun.

41
Yoda

Taste:

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
           }
        });

Funktion:

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

Hoffe das hilft :)

96
sweggersen
yourButton.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View view) {
      yourViewPager.setCurrentItem(page, smoothScroll);
   }
});
44
Alex Orlov

Ich habe dieses Projekt mit diesem Code beendet.

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);

        }
    }); 
3

Ein ausfallsicheres Upgrade auf sweggersen's und Alex Orlovs

// 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);
    }
});

Fügen Sie getNextPossibleItemIndex () in Ihre Activity/Fragment-Methode ein.

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) ;
}

Auf diese Weise können Sie currentItem ändern, ohne sich Gedanken über die IndexOutOfBoundsException machen zu müssen wie von Heinrichs Kommentar vorgeschlagen . Beachten Sie, dass mit dieser Methode Elemente wie eine zirkuläre Liste angezeigt werden.

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

Aber wenn Sie zurückgehen, hört es beim ersten Punkt auf

1 <- 1 <- 2 <- 3
3
rupinderjeet

1) Layout erstellen

      <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) Benutzerdefinierten Adapter einstellen

        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) Für die nächste und vorherige Taste

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

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

4) Nehmen Sie diese Funktion vor

  private int getItemofviewpager(int i) {
        return mViewPager.getCurrentItem() + i;
    }
3
priti

Aktualisierungscode

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); 

            }
        });
1
Java coder

Mach es so:

backButton=(Button)findViewById(R.id.back_button);
nextButton=(Button)findViewById(R.id.next_button);
backButton.setVisibility(View.INVISIBLE);//you can use GONE or even disable it. It depends on your layout 


    nextButton.setOnClickListener(new OnClickListener() {

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


    backButton.setOnClickListener(new OnClickListener() {

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

Um IndexOutOfBoundsException zu verhindern, sollten Sie die beiden Schaltflächen wie folgt ein- und ausblenden:

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }
        @Override
        public void onPageSelected(int position) {
            if(position==0) {
                backButton.setVisibility(View.INVISIBLE);
            }else  {
                backButton.setVisibility(View.VISIBLE);
            }
            if(position < viewPager.getAdapter().getCount()-1 ) {
                nextButton.setVisibility(View.VISIBLE);
            }else  {
                nextButton.setVisibility(View.INVISIBLE);
            }
        }
        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });
1
Amr Berag

Erstellen Sie zunächst eine Schnittstelle

public interface OnPageChangedListener {
void OnPageChanged(int position);      }

Weiter Implementieren Sie Ihre Aktivität mit der OnPageChangedListener-Schnittstelle und führen Sie die folgenden Schritte aus

private void setupViewPager(ViewPager viewPager){
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPagerAdapter.addFragment(new Fragment1(this));
    viewPagerAdapter.addFragment(new Fragment2(this));
    viewPagerAdapter.addFragment(new Fragment3(this));
    viewPagerAdapter.addFragment(new Fragment4(this));
    viewPagerAdapter.addFragment(new Fragment5(this));
    viewPagerAdapter.addFragment(new Fragment6(this));
    viewPager.setAdapter(viewPagerAdapter);
}
@Override
public void OnPageChanged(int position) {
    viewPager.setCurrentItem(position);
}

Erstellen Sie in Ihren Fragmenten einen Konstruktor mit

private OnPageChangedListener listener;

public Fragment1(OnPageChangedListener listener1) {
    this.listener = listener1;
}

ViewPagerAdapter

public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();

public ViewPagerAdapter(FragmentManager manager) {
    super(manager);
}

@Override
public Fragment getItem(int position) {
    switch (position) {
    }
    return mFragmentList.get(position);
}

@Override
public int getCount() {
    return mFragmentList.size();
}

public void addFragment(Fragment fragment) {
    mFragmentList.add(fragment);
}}

Hoffe das hilft dir

0
Bhaskar