使用setUserVisibleHint时,Viewpager中的第一个片段不会将数据传递到其活动

时间:2018-08-14 09:15:38

标签: android-fragments android-viewpager android-fragmentactivity setuservisiblehint

我知道已经以类似的方式提出了这个问题,但是解决方案从未解决过我所关注的问题。当viewpager中的第一个片段被实例化并且对用户可见时,我希望它发送数据。这是通过将所有必要的数据放在setUserVisibleHint方法中来完成的。我通过接口发送此数据以确保片段独立性。这里的问题是,第一个实例化的片段不会将我的数据发送到活动。一次滑动到下一个实例化的片段,然后再次突然滑动回到第一个片段,数据就被发送了。

我真的不明白为什么。可能是因为在onCreateView之前调用了setUserVisibleHint方法吗?

这里的问题与我的setUserVisibleHint method is called before the onCreateView method and does not work on the first load一样,但是解决方案并不全面,我无法解决它。

这个问题setUserVisibleHint called before onCreateView in Fragment也解决了我的问题。在该问题中,我几乎尝试了所有建议的解决方案,但没有一个能够解决我的问题。

我检查并仔细检查了viewpager的生命周期,并尝试在f.e中实现我的通信方法。 onCreate,onActivityCreated,onStart等。 什么都没用。

为了使我的问题更清楚,这里是片段中的以下代码。

private boolean isVisible;

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

    ;//Some stuff

    setUserVisibleHint(false);
    return view;


}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {                                        //Dadurch kommt es zu keinem Absturz bei der Bestimmung ob Fragment gerade gesehen werden kann
    super.onActivityCreated(savedInstanceState);
    setUserVisibleHint(myIsVisibleToUser);
}

    @Override
public void onAttach(Context context) {                                                                           //Prüft, ob das Interface in der Activity implementiert ist
    super.onAttach(context);
    if (context instanceof I_TheorieFragmentActivityInterface) {
        Activity activity = (Activity) context;
        onListener = (I_TheorieFragmentActivityInterface) activity;

    } else {
        throw new RuntimeException(context.toString() + "must implement I_TheorieFragmentActivityInterface");
    }
}

`@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    myIsVisibleToUser=isVisibleToUser;
    if (isVisibleToUser&& getActivity()!=null) {
        onListener.updatescore(true);

        text = getResources().getString(getArguments().getInt(TEXT));
        statusString = getArguments().getString(S_D_SQLDATA);
        changeString = getArguments().getString(S_D_SQLDATA1);

        onListener.sendDatatoActivity(text, statusString,changeString);
        onListener.notifypagerchange(true);
    }
} `

有人可以解决此问题吗?在此先感谢您的帮助。

0 个答案:

没有答案