我知道已经以类似的方式提出了这个问题,但是解决方案从未解决过我所关注的问题。当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);
}
} `
有人可以解决此问题吗?在此先感谢您的帮助。