손가락 스와이프가 비활성화된 ViewPager의 컨텍스트에서 개별 조각에서 데이터 가져오기 요청을 트리거하는 방법에 대한 질문이 생겼습니다. 전용 버튼으로 스와이프하면 표시됩니다.
초기 접근 방식
문제
그러나, 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 && 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 && frag is FragmentTwo) { (frag as FragmentTwo).sendGetRequest() } } } )</code>
참고: 다른 프래그먼트 클래스를 사용하는 경우 sendGetRequest() 메서드로 인터페이스를 구현하고 더 깨끗한 솔루션을 위한 각 조각입니다.
위 내용은 활동에서 ViewPager 조각의 메서드를 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!