ViewPager2内のFragmentの表示状態を監視する

ViewPager2内でFragmentを利用するとき、Fragment自身が表示状態になったことを知りたい。

ViewPager2は、表示ページが変わったときにViewPager2.OnPageChangeCallbackのonPageSelected()メソッドが呼ばれる。
ViewPager2.OnPageChangeCallbackをregisterOnPageChangeCallback()メソッドで登録することで、新しいページが表示されたことを知ることができる。

public class MainActivity extends AppCompatActivity {
    static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(this);
        ViewPager2 viewPager = findViewById(R.id.viewPager);
        viewPager.setAdapter(adapter);

        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                // 新しいページが表示された 
                Log.d(TAG, "onPageScrollStateChanged position=" + position);
            }
        });
    }
}

ViewPager2では、Fragmentが表示状態になるとFragmentのonResume()が呼ばれる。
onResume()メソッドをオーバーライドすることで、可視状態になったことが分かる。

public class LeftFragment extends Fragment {
    static final String TAG = LeftFragment.class.getSimpleName();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_left, container, false);
    }

    @Override
    public void onResume() {
        super.onResume();
        // 表示された
        Log.d(TAG, "onResume");
    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください