setUserVisibleHint()
때때로 전후에 호출 onCreateView()
되어 문제가 발생합니다.
이를 극복하려면 isResumed()
내부 setUserVisibleHint()
방법 을 확인해야합니다 . 그러나이 경우 Fragment가 재개되어 표시 될 때만setUserVisibleHint()
호출 되는 것으로 나타났습니다 .
당신이 조각이 업데이트 뭔가 싶다면 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()
에있는이 onCreateView()
조각이되지 이력서 작성 및 볼 때만 호출된다. 또한 첫 번째 탭에있을 때 문제를 해결하고 두 번째 탭이 보이지 않아도 만들어집니다. 이렇게하면 해결할 때 조각 화면이 표시되는지 확인합니다 onCreate
.
fragmentOnCreated
: 프래그먼트가 보이지 않도록하고 프래그먼트를 처음 만들 때 호출되지 않습니다. 이제이 if 절은 조각을 쓸어 넘길 때만 호출됩니다.
업데이트
당신은이 모든 코드를 넣을 수 있습니다 BaseFragment
코드를 다음과 같이 하고 재정의 방법.