Android 碎片变得可见
每次我的片段对用户可见时,我都希望执行一段代码,调用一个web服务,获取一些数据并将其显示在屏幕上。我让web服务部件等工作,但不确定在什么情况下我必须添加我的代码。。。。我试过:Android 碎片变得可见,android,Android,每次我的片段对用户可见时,我都希望执行一段代码,调用一个web服务,获取一些数据并将其显示在屏幕上。我让web服务部件等工作,但不确定在什么情况下我必须添加我的代码。。。。我试过: 启动 恢复 奥纳塔克 但我的代码并不是每次都启动 我使用带有SherlockFragment的Android v4 comp库作为基类。onCreateView() 每次更改片段并使新片段可见时调用 @Override public View onCreateView(LayoutInflater inflater,
onCreateView()
每次更改片段并使新片段可见时调用
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
每次用户看到片段时,都会调用onResume()
。如果代码不正确,则代码中还有其他错误
onCreateView()
在片段第一次需要绘制其UI时被调用
更新:这一公认的答案在5年前就已经奏效了-它不再是你可以使用的了
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else { }
}
查看一下这可能很旧,但我发现setUserVisibleHint()在我的许多用例中都不起作用。相反,我不得不使用ViewTreeObserver进行黑客攻击 基本上,在片段初始化之后,您将在其中获得一个视图,并执行以下操作:
myViewInFragment.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myMethodWhenFragmentFirstBecomesVisible();
myViewInFragment.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
下面的方法用于确定片段何时在用户面前可见
private boolean loding= false; // your boolean flage
@Override
public void setUserVisibleHint(boolean isFragmentVisible) {
super.setUserVisibleHint(true);
if (this.isVisible()) {
// we check that the fragment is becoming visible first time or not
if (isFragmentVisible && !loding) {
//Task to doing while displaying fragment in front of user
loding = true;
}
}}
看一看,让我知道,发生了什么事?我被这个问题困住了,尝试了很多不同的方法,但这一个是解决办法@keybee-只有当您使用两个片段和新创建的片段处理片段时,才会调用它。@user370305是的,但如果我理解正确,问题是关于如何获得关于用户可见片段的通知。(这里的问题是,例如,您可以创建很多片段,如果您使用后堆栈返回到以前的片段,
onCreateView
将永远不会被调用。您应该查看片段文档。活动有很大的不同。。答案是错的。就我所尝试的而言:我有一个FragmentActivity和usi在该活动中调用ViewPager。ViewPager包含4个片段。每当我的应用程序启动时(只有第一个片段可见),都会调用第一和第二个片段的onCreateView()和onResume()方法!这不是我说的吗?onResume始终被调用-也是在应用程序启动时(第一次)随着onCreateView@Lieuwe请考虑删除这个答案,因为它是误导的人谁检查正确的答案,没有什么错误的答案。请参阅Android文档:“OnReal--调用时,片段是可见的用户和积极运行”和“OnCeCaleVIEW”()-调用以使片段实例化其用户界面视图”。这里有相同的问题。文档说明onResume仅在onCreateView()之后调用一次。当您将片段添加到FragmentManager()时,似乎没有关于片段的事件。我不知道如何做。我想我们必须使用FragmentManager.OnBackbackChangedListener()但从Framint的角度来看,没有问题:(这是API 15及以上的版本):(当你按下带有嵌套碎片的后退按钮时,Boot不起作用。在选项卡布局中,Doe对我不起作用。它还被调用用于用户尚不可见的以下选项卡。