标志图像完全可见后,我必须执行一些 *** 作.
以下代码用于调用特殊任务
@OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { ImageVIEw logoImageMaster = new ImageVIEw(getContext()); //logoImageMaster.setimageResource(resID); //even after removing this,i am getting the callback twice try { // get input stream inputStream ims = getActivity().getAssets().open("product_logo.png"); // load image as Drawable Drawable d = Drawable.createFromStream(ims,null); // set image to ImageVIEw logoImageMaster.setimageDrawable(d); } catch(IOException ex) { } logoImageMaster.getVIEwTreeObserver().addOnGlobalLayoutListener(new VIEwTreeObserver.OnGlobalLayoutListener() { @OverrIDe public voID onGlobalLayout() { //FIXME get called twice. Check this out,no info to distinguish first from second// Log.e("PANEL","onGlobalLayout of logo IV ---------------------------------"); activityInterface.doSpecialLogic(); } }); return logoImageMaster; }
我的确切问题是onGlobalLayout被调用两次这个视图层次结构.
我知道onGlobalLayout在VIEw.java的performTraversal中被调用,因此这是预期的.
对于单个单子视图的单个用户的用例,我想区分视图属性,使得在标识图像完全可见后[onGlobalLayout被调用两次]即可调用doSpecialLogic.
请建议一些想法.
编辑
正如@ Guille89所指出的那样,两个调用使得onGlobalLayout被调用两次
无论如何,如果你想调用OnGlobalLayoutListener只需一次,不需要它的任何其他,如何删除它后doSpecialLogic()调用?
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { //noinspection deprecation logoImageMaster.getVIEwTreeObserver().removeGlobalOnLayoutListener(this); } else { logoImageMaster.getVIEwTreeObserver().removeOnGlobalLayoutListener(this); }activityInterface.doSpecialLogic();总结
以上是内存溢出为你收集整理的android – onGlobalLayout区分各种调用全部内容,希望文章能够帮你解决android – onGlobalLayout区分各种调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)