Programing

ViewPager에서 조각이 표시되는시기를 확인하는 방법

lottogame 2020. 9. 30. 08:35
반응형

ViewPager에서 조각이 표시되는시기를 확인하는 방법


문제점 : 조각 onResume()에이 ViewPager단편은 실제로 표시되기 전에 소성된다.

예를 들어, ViewPagerFragmentPagerAdapter. 두 번째 조각은 권한이있는 사용자 만 사용할 수 있으며 조각이 표시되면 사용자에게 로그인하도록 요청해야합니다 (경고 대화 상자 사용).

그러나 ViewPager두 번째 조각을 캐시하기 위해 첫 번째 조각이 표시되면 두 번째 조각을 만들고 사용자가 스 와이프를 시작할 때 표시되도록합니다.

따라서 onResume()이벤트는 표시되기 훨씬 전에 두 번째 조각에서 시작됩니다. 그래서 적절한 순간에 대화 상자를 표시하기 위해 두 번째 조각이 표시 될 때 발생하는 이벤트를 찾으려고합니다.

어떻게 할 수 있습니까?


업데이트 : Android 지원 라이브러리 (rev 11)는 마침내 사용자에게 보이는 힌트 문제를 수정했습니다 . 이제 조각에 지원 라이브러리를 사용하는 경우 gorn의 답변에 설명 된대로 안전하게 사용 getUserVisibleHint()하거나 재정 setUserVisibleHint()의하여 변경 사항을 캡처 할 수 있습니다 .

업데이트 1 다음은 getUserVisibleHint(). 이 값은 기본값 true입니다.

// Hint provided by the app that this fragment is currently visible to the user.
boolean mUserVisibleHint = true;

따라서 setUserVisibleHint()호출 되기 전에 사용하려고하면 문제가있을 수 있습니다 . 해결 방법으로 다음 onCreate과 같은 방법으로 값을 설정할 수 있습니다 .

public void onCreate(@Nullable Bundle savedInstanceState) {
    setUserVisibleHint(false);

구식 답변 :

대부분의 사용 사례 ViewPager에서 한 번에 한 페이지 만 표시하지만에서 사용하는 경우 사전 캐시 된 조각도 "표시"상태 (실제로 표시되지 않음)가 FragmentStatePagerAdapter됩니다 Android Support Library pre-r11.

나는 무시한다 :

public class MyFragment extends Fragment {
    @Override
    public void setMenuVisibility(final boolean visible) {
        super.setMenuVisibility(visible);
        if (visible) {
            // ...
        }
    }
   // ...
}

"가시성"의 가장 적합한 상태라고 생각하는 프래그먼트의 포커스 상태를 캡처하려면 ViewPager에서 하나의 프래그먼트 만 실제로 메뉴 항목을 부모 활동의 항목과 함께 배치 할 수 있기 때문입니다.


ViewPager에서 조각이 표시되는시기를 확인하는 방법

setUserVisibleHint에서 재정 의하여 다음을 수행 할 수 있습니다 Fragment.

public class MyFragment extends Fragment {
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
        }
        else {
        }
    }
}

이것은 onResume()예상했던 정상적인 동작 을 복원하는 것 같습니다 . 홈 키를 눌러 앱을 종료 한 다음 앱을 다시 입력하면 잘 작동합니다. onResume()연속으로 두 번 호출되지 않습니다.

@Override
public void setUserVisibleHint(boolean visible)
{
    super.setUserVisibleHint(visible);
    if (visible && isResumed())
    {
        //Only manually call onResume if fragment is already visible
        //Otherwise allow natural fragment lifecycle to call onResume
        onResume();
    }
}

@Override
public void onResume()
{
    super.onResume();
    if (!getUserVisibleHint())
    {
        return;
    }

    //INSERT CUSTOM CODE HERE
}

다음을 사용하는 또 다른 방법이 있습니다 onPageChangeListener.

  ViewPager pager = (ViewPager) findByViewId(R.id.viewpager);
  FragmentPagerAdapter adapter = new FragmentPageAdapter(getFragmentManager);
  pager.setAdapter(adapter);
  pager.setOnPageChangeListener(new OnPageChangeListener() {

  public void onPageSelected(int pageNumber) {
    // Just define a callback method in your fragment and call it like this! 
    adapter.getItem(pageNumber).imVisible();

  }

  public void onPageScrolled(int arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub

  }

  public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub

  }
});

setUserVisibleHint()때때로 전화를 받기 전과 onCreateView() 후에 문제가 발생합니다.

이를 극복하려면 isResumed()내부 setUserVisibleHint()방법 확인해야합니다 . 그러나이 경우에는 Fragment가 재개되고 표시 되는 경우 에만setUserVisibleHint() 호출 되고 생성되었을 때가 아니라는 것을 깨달았 습니다 .

따라서 Fragment가 visible때 무언가를 업데이트하려면 업데이트 기능을 onCreate()에 두십시오 setUserVisibleHint().

@Override
public View onCreateView(...){
    ...
    myUIUpdate();
    ...        
}
  ....
@Override
public void setUserVisibleHint(boolean visible){
    super.setUserVisibleHint(visible);
    if (visible && isResumed()){
        myUIUpdate();
    }
}

업데이트 : 그래도 myUIUpdate()가끔 두 번 호출 된다는 것을 깨달았 습니다. 그 이유는 3 개의 탭이 있고이 코드가 두 번째 탭에 있으면 첫 번째 탭을 처음 열 때 두 번째 탭도 표시되지 않고 myUIUpdate()호출됩니다. 그런 다음 두 번째 탭으로 스 와이프하면 myUIUpdate()from if (visible && isResumed())이 호출되어 결과적 myUIUpdate()으로 1 초에 두 번 호출 될 수 있습니다.

다른 문제가 있습니다 !visible에서 setUserVisibleHint호출되는 모두 1) 단편 화면 처음으로 전환 할 때이 생성되기 전에 조각 스크린과 2), 밖으로 갈 때.

해결책:

private boolean fragmentResume=false;
private boolean fragmentVisible=false;
private boolean fragmentOnCreated=false;
...

@Override
public View onCreateView(...){
    ...
    //Initialize variables
    if (!fragmentResume && fragmentVisible){   //only when first time fragment is created
        myUIUpdate();
    }
    ...        
}

@Override
public void setUserVisibleHint(boolean visible){
    super.setUserVisibleHint(visible);
    if (visible && isResumed()){   // only at fragment screen is resumed
        fragmentResume=true;
        fragmentVisible=false;
        fragmentOnCreated=true;
        myUIUpdate();
    }else  if (visible){        // only at fragment onCreated
        fragmentResume=false;
        fragmentVisible=true;
        fragmentOnCreated=true;
    }
    else if(!visible && fragmentOnCreated){// only when you go out of fragment screen
        fragmentVisible=false;
        fragmentResume=false;
    }
}

설명:

fragmentResume, fragmentVisible: 이력서가 아닌 조각이 생성되고 표시 될 때만 myUIUpdate()in onCreateView()이 호출 되는지 확인 합니다. 또한 첫 번째 탭에있을 때 문제를 해결하고, 두 번째 탭은 보이지 않아도 생성됩니다. 이것은 그것을 해결하고 때 조각 화면이 보이는지 확인합니다 onCreate.

fragmentOnCreated: 조각이 보이지 않도록하고 조각을 처음 만들 때 호출되지 않도록합니다. 이제이 if 절은 조각 밖으로 스 와이프 할 때만 호출됩니다.

업데이트이 모든 BaseFragment코드를 이와 같은 코드에 넣고 메서드를 재정의 할 수 있습니다 .


감지하기 FragmentViewPager눈에 보이는, 꽤 있는지 해요 에만 사용이 setUserVisibleHint 충분하지 않습니다.
다음은 조각이 표시되는지 또는 표시되지 않는지 확인하는 솔루션입니다. 먼저 viewpager를 시작할 때 페이지를 전환하고 다른 활동 / 단편 / 배경 / 전경으로 이동합니다`

public class BaseFragmentHelpLoadDataWhenVisible extends Fragment {
    protected boolean mIsVisibleToUser; // you can see this variable may absolutely <=> getUserVisibleHint() but it not. Currently, after many test I find that

    /**
     * This method will be called when viewpager creates fragment and when we go to this fragment background or another activity or fragment
     * NOT called when we switch between each page in ViewPager
     */
    @Override
    public void onStart() {
        super.onStart();
        if (mIsVisibleToUser) {
            onVisible();
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if (mIsVisibleToUser) {
            onInVisible();
        }
    }

    /**
     * This method will called at first time viewpager created and when we switch between each page
     * NOT called when we go to background or another activity (fragment) when we go back
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        mIsVisibleToUser = isVisibleToUser;
        if (isResumed()) { // fragment have created
            if (mIsVisibleToUser) {
                onVisible();
            } else {
                onInVisible();
            }
        }
    }

    public void onVisible() {
        Toast.makeText(getActivity(), TAG + "visible", Toast.LENGTH_SHORT).show();
    }

    public void onInVisible() {
        Toast.makeText(getActivity(), TAG + "invisible", Toast.LENGTH_SHORT).show();
    }
}

설명 아래 logcat을주의 깊게 확인하면이 솔루션이 작동하는 이유를 알 수있을 것입니다.

첫 출시

Fragment1: setUserVisibleHint: isVisibleToUser=false isResumed=false
Fragment2: setUserVisibleHint: isVisibleToUser=false isResumed=false
Fragment3: setUserVisibleHint: isVisibleToUser=false isResumed=false
Fragment1: setUserVisibleHint: isVisibleToUser=true isResumed=false // AT THIS TIME isVisibleToUser=true but fragment still not created. If you do something with View here, you will receive exception
Fragment1: onCreateView
Fragment1: onStart mIsVisibleToUser=true
Fragment2: onCreateView
Fragment3: onCreateView
Fragment2: onStart mIsVisibleToUser=false
Fragment3: onStart mIsVisibleToUser=false

2 페이지로 이동

Fragment1: setUserVisibleHint: isVisibleToUser=false isResumed=true
Fragment2: setUserVisibleHint: isVisibleToUser=true isResumed=true

3 페이지로 이동

Fragment2: setUserVisibleHint: isVisibleToUser=false isResumed=true
Fragment3: setUserVisibleHint: isVisibleToUser=true isResumed=true

배경으로 이동 :

Fragment1: onStop mIsVisibleToUser=false
Fragment2: onStop mIsVisibleToUser=false
Fragment3: onStop mIsVisibleToUser=true

전경으로 이동

Fragment1: onStart mIsVisibleToUser=false
Fragment2: onStart mIsVisibleToUser=false
Fragment3: onStart mIsVisibleToUser=true

여기에 데모 프로젝트

도움이되기를 바랍니다.


package com.example.com.ui.fragment;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.com.R;

public class SubscribeFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_subscribe, container, false);
        return view;
    }

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

        if (isVisibleToUser) {
            // called here
        }
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }
}

하위 클래스 setPrimaryItem()에서 재정의 합니다 FragmentPagerAdapter. 저는이 방법을 사용하는데 잘 작동합니다.

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    // This is what calls setMenuVisibility() on the fragments
    super.setPrimaryItem(container, position, object);

    if (object instanceof MyWhizBangFragment) {
        MyWhizBangFragment fragment = (MyWhizBangFragment) object;
        fragment.doTheThingYouNeedToDoOnBecomingVisible();
    }
}

Fragment.onHiddenChanged()그것을 무시하십시오 .

public void onHiddenChanged(boolean hidden)

isHidden()조각 의 숨겨진 상태 (에서 반환 됨 )가 변경 되었을 때 호출됩니다 . 조각은 숨겨지지 않고 시작됩니다. 조각이 그 상태를 변경할 때마다 호출됩니다.

매개 변수
hidden- boolean: 프래그먼트가 이제 숨겨져 있으면 True, 보이지 않으면 False입니다.


나는 것을 파악 onCreateOptionsMenu하고 onPrepareOptionsMenu방법 만 조각의 경우라고 정말 볼. 나는 이와 같이 작동하는 방법을 찾을 수 없었고 시도 OnPageChangeListener했지만 상황에서 작동하지 않았습니다. 예를 들어 onCreate방법 에서 초기화 된 변수가 필요합니다 .

따라서이 두 가지 방법은이 문제에 대한 해결 방법으로 특히 작거나 짧은 작업에 사용할 수 있습니다.

나는 이것이 더 나은 해결책이라고 생각하지만 최고는 아닙니다. 나는 이것을 사용하지만 동시에 더 나은 해결책을 기다립니다.

문안 인사.


kris larson의 pageradapter에서 setPrimaryItem을 재정의하는 또 다른 솔루션 거의 나를 위해 일했습니다. 그러나이 메서드는 각 설정에 대해 여러 번 호출됩니다. 또한 이 메서드가 처음 몇 번 호출 될 때 준비되지 않았기 때문에 조각의 뷰 등에서 NPE얻었습니다 . 다음과 같은 변경 사항이 적용되었습니다.

private int mCurrentPosition = -1;

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    super.setPrimaryItem(container, position, object);

    if (position == mCurrentPosition) {
        return;
    }

    if (object instanceof MyWhizBangFragment) {
        MyWhizBangFragment fragment = (MyWhizBangFragment) object;

        if (fragment.isResumed()) {
            mCurrentPosition = position;
            fragment.doTheThingYouNeedToDoOnBecomingVisible();
        }
    }
}

조각 안에 다음 코드 추가

@Override
public void setMenuVisibility(final boolean visible) 
 {
    super.setMenuVisibility(visible);
    if (visible && isResumed()) 
     {

     }
}

FragmentStatePagerAdapters및 3 개의 탭으로 작업하는 동안 동일한 문제가 발생했습니다 . 첫 번째 탭을 클릭 할 때마다 Dilaog를 표시하고 다른 탭을 클릭하면 숨겨야했습니다.

재정의 setUserVisibleHint()만으로는 현재 보이는 조각을 찾는 데 도움이되지 않았습니다.

세 번째 탭에서 클릭하면 -----> 첫 번째 탭. 두 번째 조각과 첫 번째 조각에 대해 두 번 트리거되었습니다. isResumed () 메서드와 결합했습니다.

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

    // Make sure that fragment is currently visible
    if (!isVisible && isResumed()) {
        // Call code when Fragment not visible
    } else if (isVisible && isResumed()) {
       // Call code when Fragment becomes visible.
    }

}

MVP에는 조각이 발표자에게 뷰가 표시되었음을 알려야하고 발표자는 Dagger에서 fragment.onAttach().

setUserVisibleHint()충분하지 않습니다. 해결해야 할 세 가지 사례를 발견 onAttach()했습니다 (발표자가 언제 사용 가능한지 알 수 있도록 언급 됨).

  1. 조각이 방금 생성되었습니다. 시스템은 다음을 호출합니다.

    setUserVisibleHint() // before fragment's lifecycle calls, so presenter is null
    onAttach()
    ...
    onResume()
    
  2. 조각이 이미 생성되었으며 홈 버튼을 눌렀습니다. 앱을 포 그라운드로 복원 할 때 다음이 호출됩니다.

    onResume()
    
  3. 방향 변경 :

    onAttach() // presenter available
    onResume()
    setUserVisibleHint()
    

가시성 힌트가 발표자에게 한 번만 전달되기를 원하므로 다음과 같이합니다.

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_list, container, false);
    setHasOptionsMenu(true);

    if (savedInstanceState != null) {
        lastOrientation = savedInstanceState.getInt(STATE_LAST_ORIENTATION,
              getResources().getConfiguration().orientation);
    } else {
        lastOrientation = getResources().getConfiguration().orientation;
    }

    return root;
}

@Override
public void onResume() {
    super.onResume();
    presenter.onResume();

    int orientation = getResources().getConfiguration().orientation;
    if (orientation == lastOrientation) {
        if (getUserVisibleHint()) {
            presenter.onViewBecomesVisible();
        }
    }
    lastOrientation = orientation;
}

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (presenter != null && isResumed() && isVisibleToUser) {
        presenter.onViewBecomesVisible();
    }
}

@Override public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(STATE_LAST_ORIENTATION, lastOrientation);
}

에 의해 감지 focused view!

이것은 나를 위해 작동합니다

public static boolean isFragmentVisible(Fragment fragment) {
    Activity activity = fragment.getActivity();
    View focusedView = fragment.getView().findFocus();
    return activity != null
            && focusedView != null
            && focusedView == activity.getWindow().getDecorView().findFocus();
}

사용자가 볼 수 있도록 뷰 페이저의 조각이 화면에있을 때 타이머를 실행하려고 할 때이 문제가 발생했습니다.

타이머는 항상 사용자가 조각을보기 직전에 시작되었습니다. onResume()조각을보기 전에 조각 메서드가 호출되기 때문 입니다.

내 해결책은 onResume()방법을 확인하는 것이 었습니다 . 조각 8이 뷰 호출기 현재 조각 일 때 특정 메서드 'foo ()'를 호출하고 싶었습니다.

@Override
public void onResume() {
    super.onResume();
    if(viewPager.getCurrentItem() == 8){
        foo();
        //Your code here. Executed when fragment is seen by user.
    }
}

도움이 되었기를 바랍니다. 이 문제가 많이 발생하는 것을 보았습니다. 이것은 내가 본 가장 간단한 해결책 인 것 같습니다. 다른 많은 것들은 하위 API 등과 호환되지 않습니다.


나는 같은 문제가 있었다. ViewPager다른 조각 수명주기 이벤트를 실행하고 해당 동작을 변경할 수 없습니다. 단편과 사용 가능한 애니메이션을 사용하여 간단한 호출기를 작성했습니다. SimplePager


나는 하위 조각으로 SectionsPagerAdapter를 지원하므로 많은 두통 끝에 마침내이 주제의 솔루션을 기반으로 작동하는 버전을 얻었습니다.

public abstract class BaseFragment extends Fragment {

    private boolean visible;
    private boolean visibilityHintChanged;

    /**
     * Called when the visibility of the fragment changed
     */
    protected void onVisibilityChanged(View view, boolean visible) {

    }

    private void triggerVisibilityChangedIfNeeded(boolean visible) {
        if (this.visible == visible || getActivity() == null || getView() == null) {
            return;
        }
        this.visible = visible;
        onVisibilityChanged(getView(), visible);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!visibilityHintChanged) {
            setUserVisibleHint(false);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        if (getUserVisibleHint() && !isHidden()) {
            triggerVisibilityChangedIfNeeded(true);
        }
    }

    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        triggerVisibilityChangedIfNeeded(!hidden);
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        visibilityHintChanged = true;
        if (isVisibleToUser && isResumed() && !isHidden()) {
            triggerVisibilityChangedIfNeeded(true);
        } else if (!isVisibleToUser) {
            triggerVisibilityChangedIfNeeded(false);
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        triggerVisibilityChangedIfNeeded(false);
    }

    @Override
    public void onStop() {
        super.onStop();
        triggerVisibilityChangedIfNeeded(false);
    }

    protected boolean isReallyVisible() {
        return visible;
    }
}

에서 ViewPager2ViewPager버전에서 androidx.fragment:fragment:1.1.0당신은 사용할 수 있습니다 onPauseonResume콜백은 현재 사용자가 볼 수있는 단편 결정합니다. onResume콜백은 프래그먼트가 표시되고 표시되지 않을 때 호출됩니다 onPause.

ViewPager2의 경우 기본 동작이지만 이전 제품에 대해 동일한 동작을 ViewPager쉽게 사용할 수 있습니다.

첫 번째 ViewPager에서이 동작을 활성화하려면 FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT매개 변수를 FragmentPagerAdapter생성자의 두 번째 인수 로 전달해야합니다 .

FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)

참고 : 하나의 매개 변수가있는 setUserVisibleHint()메서드 및 FragmentPagerAdapter생성자는 이제 Android Jetpack의 새 버전의 Fragment에서 더 이상 사용되지 않습니다.


setUserVisibleHint(false)활동 / 조각 정지에 호출되지 않습니다. register/unregister리스너 등 을 올바르게 시작 / 중지하려면 여전히 확인해야합니다 .

또한 setUserVisibleHint(false)조각이 보이지 않는 상태에서 시작되면 얻을 수 있습니다. unregister그 경우에는 전에 등록한 적이 없기 때문에 거기에 가고 싶지 않습니다 .

@Override
public void onStart() {
    super.onStart();

    if (getUserVisibleHint()) {
        // register
    }
}

@Override
public void onStop() {
    if (getUserVisibleHint()) {
        // unregister
    }

    super.onStop();
}

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

    if (isVisibleToUser && isResumed()) {
        // register

        if (!mHasBeenVisible) {
            mHasBeenVisible = true;
        }
    } else if (mHasBeenVisible){
        // unregister
    }
}

나는 이것을 사용했고 그것은 효과가 있었다!

mContext.getWindow().getDecorView().isShown() //boolean

프래그먼트로 이동하기 전에 사용자가 로그인했는지 확인하는 간단한 구현 방법입니다 .

MainActivity에서 onNavigationItemSelected 메서드 내에서 이와 같은 작업을 수행 할 수 있습니다 .

 case R.id.nav_profile_side:


                if (User_is_logged_in) {

                    fragmentManager.beginTransaction()
                            .replace(R.id.content_frame
                                    , new FragmentProfile())
                            .commit();
                }else {

                    ShowLoginOrRegisterDialog(fragmentManager);

                }

                break;

그러나 내비게이션 드로어를 사용하는 경우 드로어의 선택은 ProfileFragment로 이동하지 않았지만 Profile로 변경됩니다.

선택을 현재 선택으로 재설정하려면 아래 코드를 실행하십시오.

        navigationView.getMenu().getItem(0).setChecked(true);

연결된 FragmentStatePagerAdapter의 Count 메서드를 재정의하고 총 개수에서 숨길 페이지 수를 뺀 값을 반환하도록합니다.

 public class MyAdapter : Android.Support.V13.App.FragmentStatePagerAdapter
 {   
     private List<Fragment> _fragments;

     public int TrimmedPages { get; set; }

     public MyAdapter(Android.App.FragmentManager fm) : base(fm) { }

     public MyAdapter(Android.App.FragmentManager fm, List<Android.App.Fragment> fragments) : base(fm)
     {
         _fragments = fragments;

         TrimmedPages = 0;
     }

     public override int Count
     {
         //get { return _fragments.Count; }
         get { return _fragments.Count - TrimmedPages; }
     }
 }

따라서 처음에 ViewPager에 추가 된 3 개의 조각이 있고 일부 조건이 충족 될 때까지 처음 2 개만 표시되어야하는 경우 TrimmedPages를 1로 설정하여 페이지 수를 재정의하고 처음 두 페이지 만 표시해야합니다.

이것은 끝에있는 페이지에 적합하지만 처음 또는 중간에있는 페이지에는 실제로 도움이되지 않습니다 (많은 방법이 있지만).

참고 URL : https://stackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager

반응형

'Programing' 카테고리의 다른 글

Solr 대 ElasticSearch  (0) 2020.09.30
목록  (0) 2020.09.30
MySQL 오류 코드 : MySQL Workbench에서 업데이트 중 1175  (0) 2020.09.30
__proto__ VS.  (0) 2020.09.30
Ruby의 여러 줄 주석?  (0) 2020.09.30