当ViewPager中的片段变得可见时,需要向用户显示消息。目前的电话是:
// Within a class that extends Fragment
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
MessageUtility.displayMessage(getContext());
}
}
MessageUtility.displayMessage()
打开一个带有消息的警告对话框。
Context
。但是,在调用setUserVisibleHint()
时,不保证片段是附加的。因此,即使Context
,null
也会isVisiableToUser == true
。
检查isVisibleToUser && isAttached()
理论上是有效的,但在setUserVisibleHint()
之后不会引发isAttached() == true
。
是否有某种方法可以让displayMessage()
的来电等到Fragment
附加?
答案 0 :(得分:3)
迟到总比没有好,我有一点hackish解决方案,从setUserVisibleHint()
方法调用onActivityCreated()
。
private boolean myIsVisibleToUser;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
myIsVisibleToUser=isVisibleToUser;
if (isVisibleToUser && getActivity()!=null) {
MessageUtility.displayMessage(getContext());
}
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setUserVisibleHint(myIsVisibleToUser);
}
答案 1 :(得分:0)
这是一种不同的方法,但更有效的解决方案。向OnPageChangeListenr
添加新的ViewPager
。
yourPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
}
@Override
public void onPageSelected(int i) {
// Check if i == your fragment's position and display message
MessageUtility.displayMessage(getContext());
}
@Override
public void onPageScrollStateChanged(int i) {
}
});