の現在のページ位置を知りたいViewPager
。アダプターを作成し、このアダプターをに設定しViewPager
ます。その特定のページでいくつかの追加のイベントを開始したいので、現在のページ番号または現在のビューの位置を知りたいと思います。
viewPager.setCurrentItem(1);
最初の項目の設定に使用しました。
現在のページを取得するための同様の方法はありますか?
回答:
最新のパッケージでは、
vp.getCurrentItem()
または
vpはviewPagerであり、
pageListener = new PageListener();
vp.setOnPageChangeListener(pageListener);
viewPagerのページ変更リスナーを配置する必要があります。現在のページを取得するためのviewPagerのメソッドはありません。
private int currentPage;
private static class PageListener extends SimpleOnPageChangeListener{
public void onPageSelected(int position) {
Log.i(TAG, "page selected " + position);
currentPage = position;
}
}
setOnPageChangeListener()
は非推奨ですaddOnPageChangeListener()
。代わりに使用してください。
object_of_ViewPager.getCurrentItem()
ビューページャーの現在表示されているページの位置を返すメソッドがあります
位置だけが必要な場合vp.getCurrentItem()
は、それを提供します。その目的だけでonPageChangeListener()を適用する必要はありません。
setOnPageChangeListenerが非推奨になっていることがわかります。以下のように、addOnPageChangeListenerを使用してください。
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) {
}
});
この問題の場合、Onpagechangeリスナーが最適ですが、0番目の位置の開始時刻を検出しないという小さな間違いもあります。ページを変更すると、ページで選択された位置の検出が開始されます...このため問題私は最も簡単な解決策を見つけます
1.選択した位置の値を維持して使用する必要があります... 2。ケース1:位置の開始時は常にゼロです....
ケース2:現在の項目を設定すると、それを設定するとします。位置を維持するための価値
3.次に、あなたの活動で維持することを使用してあなたの行動を行います。
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();
}
});
getCurrentItem()
、実際には最初と最後のページの正しい位置を示していません。このコードを追加して修正しました。
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;
}
viewpager.iにはすでにAPIをチェックしたメソッドgetCurrentItem()はありません
setOnPageChangeListener()メソッドは推奨されています。代わりにaddOnPageChangeListener(OnPageChangeListener)を使用してください 。
OnPageChangeListenerを使用して、onPageSelected()
メソッド内の位置を取得できます。これは例です。
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) {
}
});
または、getCurrentItem()を使用して実際の位置を取得します。
viewPager.getCurrentItem();