>Java >java지도 시간 >활동에서 ViewPager 조각의 메서드를 호출하는 방법은 무엇입니까?

활동에서 ViewPager 조각의 메서드를 호출하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-03 09:13:02923검색

How to Call Methods in ViewPager Fragments from Activity?

활동에서 ViewPager 조각 메서드 호출

손가락 스와이프가 비활성화된 ViewPager의 컨텍스트에서 개별 조각에서 데이터 가져오기 요청을 트리거하는 방법에 대한 질문이 생겼습니다. 전용 버튼으로 스와이프하면 표시됩니다.

초기 접근 방식

  1. setUserVisibleHint(): 처음에는 사용되었지만 애니메이션이 실행될 때 지연이 발생했습니다. 관련.
  2. OnPageChangeListener(): 페이지 변경을 성공적으로 모니터링하는 더 나은 접근 방식입니다.

문제

그러나, OnPageChangeListener() 내의 조각에서 sendGetRequest() 메서드를 호출하면 NullPointerException이 발생했습니다.

해결책

문제를 해결하고 조각 참조를 유지하려면 어댑터가 필요했습니다.

조각 참조가 있는 PagerAdapter

각 조각에 대한 참조를 보유하는 PagerAdapter를 소개합니다.

<code class="java">class PagerAdapter extends FragmentPagerAdapter {
    public Fragment[] fragments;

    // Instantiate fragments and add to array
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
        fragments[position] = createdFragment;
        return createdFragment;
    }
}</code>

조각 액세스 from Activity

그런 다음 활동에서 새 조각을 만드는 대신 참조된 조각을 사용합니다.

<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        Fragment frag = mAdapter.fragments[position];
        if (frag != null &amp;&amp; frag instanceof FragmentTwo) {
            ((FragmentTwo)frag).sendGetRequest();
        }
    }
});</code>

ViewPager2 및 Kotlin

ViewPager2와 Kotlin의 경우 솔루션은 비슷합니다.

<code class="kotlin">viewPager.registerOnPageChangeCallback(
    object: ViewPager2.OnPageChangeCallback() {
        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            val frag: Fragment = mAdapter.fragments[position]
            if (frag != null &amp;&amp; frag is FragmentTwo) {
                (frag as FragmentTwo).sendGetRequest()
            }
        }
    }
)</code>

참고: 다른 프래그먼트 클래스를 사용하는 경우 sendGetRequest() 메서드로 인터페이스를 구현하고 더 깨끗한 솔루션을 위한 각 조각입니다.

위 내용은 활동에서 ViewPager 조각의 메서드를 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.