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

NullPointerException 없이 ViewPager OnPageChangeListener에서 조각 메서드를 호출하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-03 09:08:29592검색

How to Call a Fragment Method from a ViewPager OnPageChangeListener Without a NullPointerException?

활동에서 ViewPager 조각 메서드에 액세스

귀하의 시나리오에는 여러 조각 인스턴스가 있는 ViewPager가 있고 GET을 수행하려고 합니다. 스와이프한 후 검색된 데이터가 표시되면 조각에 검색된 데이터를 요청하고 표시합니다.

첫 번째 접근 방식: setUserVisibleHint

setUserVisibleHint를 사용하는 것은 다음과 같은 경우 즉시 요청을 트리거하므로 이상적이지 않습니다. 조각이 표시되어 스와이프의 부드러운 애니메이션이 중단됩니다.

두 번째 접근 방식: OnPageChangeListener

OnPageChangeListener는 더 적합한 접근 방식을 제공합니다. 그러나 onPageScrollStateChanged 메서드에서 sendGetRequest()를 호출하려고 하면 NullPointerException이 발생합니다.

해결책

NullPointerException은 다음에서 컨텍스트를 사용하려고 하기 때문에 발생합니다. 조각 내 ViewPager의 OnPageChangeListener. 이 경우 컨텍스트는 Fragment의 작업에 적합하지 않은 MainActivity입니다.

이 문제를 해결하려면 대신 Fragment의 컨텍스트에 대한 참조를 전달해야 합니다. 수정된 OnPageChangeListener는 다음과 같습니다.

<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    int currentPosition = 0;

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

    @Override
    public void onPageSelected(int position) {
        currentPosition = position;
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        if (state == ViewPager.SCROLL_STATE_IDLE && currentPosition != 0) {
            try {
                Fragment fragment = mAdapter.fragments[currentPosition];
                if (fragment != null && fragment instanceof FragmentTwo) {
                    ((FragmentTwo) fragment).sendGetRequest();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
});</code>

이 코드에서는 FragmentAdapter의 조각 배열을 사용하여 현재 위치에서 조각에 대한 참조를 얻습니다. 그런 다음 Fragment를 적절한 유형(이 경우 FragmentTwo)으로 캐스팅하고 sendGetRequest() 메서드를 호출합니다.

이 접근 방식을 사용하면 GET 요청을 트리거하고 가져온 데이터를 원하는 Fragment에 표시할 수 있습니다. 스와이프 애니메이션이 원활하게 완료됩니다.

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

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