Quero saber a posição atual da página do ViewPager
. Eu crio um adaptador e o defino como ViewPager
. Agora eu quero saber o número da página atual ou a posição da visão atual, porque quero iniciar alguns eventos extras nessa página específica.
Eu usei viewPager.setCurrentItem(1);
para definir o primeiro item.
Existe um método semelhante para obter a página atual?
android
android-viewpager
sam_k
fonte
fonte
setOnPageChangeListener()
está obsoleto, use em seuaddOnPageChangeListener()
lugar.Existe um método
object_of_ViewPager.getCurrentItem()
que retorna a posição da página visualizada atualmente do pager de visualizaçãofonte
Se você quiser apenas a posição,
vp.getCurrentItem()
vai dar para você, não há necessidade de aplicar o onPageChangeListener () apenas para esse fim.fonte
Você descobrirá que setOnPageChangeListener está obsoleto, use addOnPageChangeListener, conforme abaixo:
ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if(position == 1){ // if you want the second page, for example //Your code here } } @Override public void onPageScrollStateChanged(int state) { } });
fonte
Para este problema, o listener Onpagechange é o melhor, mas também terá um pequeno erro que não detectará a hora de início da 0ª posição. Assim que você mudar a página, ela começará a detectar a posição selecionada na página ... Para isso problema encontrei a solução mais fácil
1.Você tem que manter o valor da posição selecionada e então usá-lo ....
2. Caso 1: No início da posição é sempre Zero ....
Caso 2: Suponha que se você definir o item atual significa que você irá definir isso valor para manter a posição
3. Em seguida, faça sua ação com o uso de manter em sua atividade ...
Public int maintain=0; myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i2) { //Toast.makeText(MyActivity.this, i+" Is Selected "+data.size(), Toast.LENGTH_SHORT).show(); } @Override public void onPageSelected( int i) { // here you will get the position of selected page maintain = i; } @Override public void onPageScrollStateChanged(int i) { } }); updateButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MyActivity.this, i+" Is Selected "+data.size(), Toast.LENGTH_SHORT).show(); data.set(maintain, "Replaced "+maintain); myViewPager.getAdapter().notifyDataSetChanged(); } });
fonte
getCurrentItem()
, na verdade não fornece a posição correta para a primeira e a última página. Corrigi-o adicionando este código:public void CalcPostion() { current = viewPager.getCurrentItem(); if ((last == current) && (current != 1) && (current != 0)) { current = current + 1; viewPager.setCurrentItem(current); } if ((last == 1) && (current == 1)) { last = 0; current = 0; } display(); last = current; }
fonte
Não existe nenhum método getCurrentItem () em viewpager.i já verificado na API
fonte
Você pode usar OnPageChangeListener e obter a posição dentro do
onPageSelected()
método, este é um exemplo:viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { Log.d(TAG, "my position is : " + position); } @Override public void onPageScrollStateChanged(int state) { } });
Ou apenas use getCurrentItem () para obter a posição real:
viewPager.getCurrentItem();
fonte