当 ViewPager 中的 fragment 变得可见时,需要向用户显示一条消息。目前调用是:
// Within a class that extends Fragment
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
MessageUtility.displayMessage(getContext());
}
}
MessageUtility.displayMessage()
打开带有消息的警告对话框。
Context
是显示消息所必需的。但是,不能保证在调用 setUserVisibleHint()
时附加该 fragment 。因此,Context
将为 null
,即使 isVisiableToUser == true
。
检查 isVisibleToUser && isAttached()
在理论上是可行的,但是 setUserVisibleHint()
在 isAttached() == true
之后不会被触发。
有没有什么方法可以让 displayMessage()
的调用等到 Fragment
被附加?
最佳答案
迟到总比不到好,我有一个有点老套的解决方案,从 onActivityCreated()
方法调用 setUserVisibleHint()
。
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);
}
关于java - setUserVisibleHint 中的空上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105725/