162

ViewPager 内に 3 つのページ (フラグメント) がありますが、そのうちの 2 つのページのメニュー項目のみを表示したいと考えています。

以前のSOの回答で指定されたコードは機能していないようです:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser == true) { }
    else if (isVisibleToUser == false) {  }

}

Eclipse は、@Override は必要なく、super を設定できないと言っています。システムによって呼び出されることはありません。たとえそれがあったとしても、現在表示されているページをどのように判断するのでしょうか? ここで何か助けてもらえますか?

4

5 に答える 5

314

次を使用しViewPager.onPageChangeListenerます。

viewPager.addOnPageChangeListener(new OnPageChangeListener() {
    public void onPageScrollStateChanged(int state) {}
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

    public void onPageSelected(int position) {
        // Check if this is the page you want.
    }
});
于 2012-07-02T13:16:41.150 に答える
38

ViewPager.SimpleOnPageChangeListener代わりに使用ViewPager.OnPageChangeListenerして、使用したいメソッドのみをオーバーライドすることもできます。

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {

    // optional 
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

    // optional 
    @Override
    public void onPageSelected(int position) { }

    // optional 
    @Override
    public void onPageScrollStateChanged(int state) { }
});

この助けを願っています:)

編集: Android API に従って、setOnPageChangeListener (ViewPager.OnPageChangeListener listener)非推奨です。この URL を確認してください:- Android ViewPager API

于 2015-08-12T09:36:59.260 に答える
34

ViewPager2 の場合、

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
  override fun onPageSelected(position: Int) {
    super.onPageSelected(position)
  }
})

whereOnPageChangeCallbackは 3 つのメソッドを持つ静的クラスです。

onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels),
onPageSelected(int position), 
onPageScrollStateChanged(@ScrollState int state)
于 2019-09-22T02:56:44.913 に答える