当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()时就附加该片段。因此,即使Contextnull也将是isVisiableToUser == true

理论上检查isVisibleToUser && isAttached()是可行的,但是setUserVisibleHint()之后不会触发isAttached() == true

有什么方法可以让对displayMessage()的调用等待直到附加了Fragment吗?

最佳答案

总比没有好,我有一点棘手的解决方案,请从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);

}

09-28 09:25