Pak*_*ung 8 android visibility android-fragments android-viewpager
我试图在用户将页面切换到我的子片段时调用一个函数.但是,当我尝试使用setUserVisibleHint和onResume时,两个函数都是从我的父片段调用的.
首先,我在中设置了一个视图寻呼机 Activity
然后在A1,A3和B1中,我有setUserVisibleHint和onResume函数.
setUserVisibleHint和onResume函数
@Override
public void setUserVisibleHint(boolean visible) {
super.setUserVisibleHint(visible);
Log.d("A1", "setUserVisibleHint"); // A3 for Fragment A3 and B1 for Fragment B1
if (visible && isResumed())
onResume();
}
@Override
public void onResume() {
super.onResume();
Log.d("A1", "onResume"); // A3 for Fragment A3 and B1 for Fragment B1
if (!getUserVisibleHint())
return;
}
Run Code Online (Sandbox Code Playgroud)
问题:
当我从页面A单击页面B并且视图是片段B1时,我得到(这没关系)
D/A1: setUserVisibleHint
D/B1: setUserVisibleHint
D/B1: onResume
Run Code Online (Sandbox Code Playgroud)
当我从页面B单击页面A并且视图是片段A1时,我得到(这没关系)
D/B1: setUserVisibleHint
D/A1: setUserVisibleHint
D/A1: onResume
Run Code Online (Sandbox Code Playgroud)
当我从页面B单击页面A并且视图是片段A3时,我得到(问题)
D/B1: setUserVisibleHint
D/A1: setUserVisibleHint
D/A1: onResume
Run Code Online (Sandbox Code Playgroud)
我假设打印输出应该如下所示,但我不确定为什么父片段调用的函数.
D/B1: setUserVisibleHint
D/A3: setUserVisibleHint
D/A3: onResume
Run Code Online (Sandbox Code Playgroud)
参考
从片段A1 - > A2,
A2 a2 = new A2();
getFragmentManager().beginTransaction().add(R.id.A1_frameChildFragment, a2)
.addToBackStack(null)
.commit();
Run Code Online (Sandbox Code Playgroud)
从片段A2 - > A3,
A3 a3 = new A3();
getFragmentManager().beginTransaction().add(R.id.A2_frameChildFragment, a3)
.addToBackStack(null)
.commit();
Run Code Online (Sandbox Code Playgroud)
onResume 在中的Tab键之间切换时,不会调用ViewPager。
setUserVisibleHint 会叫的时候你之间切换每个标签的父片段ViewPager,并不会叫儿童片段。
这是默认行为,因此我认为我们无法更改。
但是,有一种解决方法。它正在将可见的提示从父片段发送到子片段
// visible hint in parent fragment
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (!isAdded()) {
return;
}
Fragment fragment = getChildFragmentManager().findFragmentById(R.id.A1_frameChildFragment); // find current child fragment
if (fragment != null) {
fragment.setUserVisibleHint(isVisibleToUser); // send visible from parent to this child fragment
}
}
Run Code Online (Sandbox Code Playgroud)
小智 3
setOnPageChangeListener 方法现已弃用,请改用 addOnPageChangeListener
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// do your work
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2421 次 |
| 最近记录: |