我需要在片段可见时(对用户)执行一个方法。
实施例:
我有2个按钮(按钮1和按钮2),
2个片段(片段1和片段2)
和类片段2中的方法loadImages()
。
当我按下“button2”时,我想用片段2替换片段1
然后在片段2可见(给用户)之后调用loadImages()
。
我尝试在片段类中使用onResume()
,但它在片段可见之前调用该方法,并且会使转换延迟。
我也试过了setUserVisibleHint()
但没有用。
一个很好的例子是Instagram应用程序。当您单击配置文件时,它首先加载配置文件活动,然后导入所有图像。
我希望有人可以帮助我。我非常感谢你的帮助。谢谢。
答案 0 :(得分:1)
使用ViewTreeObserver
回调:
@Override
public void onViewCreated(View v, Bundle savedInstanceState) {
super.onViewCreated(v, savedInstanceState);
final View view = v;
// Add a callback to be invoked when the view is drawn
view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
@Override
public void onDraw() {
// Immediately detach the listener so it only is called once
view.getViewTreeObserver().removeOnDrawListener(this);
// You're visible! Do your stuff.
loadImages();
}
});
}
答案 1 :(得分:0)
使用onActivityCreated()callBack
答案 2 :(得分:-1)
我对你要做的事感到有点困惑。听起来这些图像加载速度太快了......那么这是否意味着您已准备好显示图像?那是件坏事吗?
我的猜测(这只是一个猜测)是Instagram没有内存中的个人资料图片,所以他们必须进行API调用来检索它们,这就是为什么它们会出现延迟。如果您的情况相同,请考虑在片段的AsyncTask
方法中启动onResume
。在后台执行您需要为图像做的任何加载,然后使图像出现在主线程上的onPostExecute回调中。如果图像尚未加载,请确保仅启动任务。
但是,如果您已经将图像加载到内存中,并且只是希望在用户看到它们之前出现延迟,那么您可以在postDelayed
上执行Handler
方法。像这样:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
loadImages();
}
}, 1000);
修改强>
正如kcoppock指出的那样,处理程序代码非常糟糕。我的意思是它是一个快速的例子,但它是错误的我不应该首先包含它。更完整的答案是:
private Handler handler;
public void onResume(){
super.onResume();
if(handler == null){
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
loadImages();
}
}, 1000);
}
}
public void onDestroyView(){
super.onDestroyView();
handler.removeCallbacksAndMessages(null);
handler = null;
}