Android:创建活动接口后调用的方法

Posted

技术标签:

【中文标题】Android:创建活动接口后调用的方法【英文标题】:Android: method called after creation of activity interface 【发布时间】:2013-11-04 10:08:09 【问题描述】:

我想在创建活动的图形界面后执行一些任务。我需要知道某些视图的确切高度和宽度,并根据宽度和高度更改其中一些视图的 layoutParams。在onResume 方法中,视图的所有参数仍然等于 0...

至于现在,我正在使用从 onCreate 运行一段时间后运行的延迟任务,但这根本不是一个好的解决方案......

活动创建中最后调用的方法是什么?在这种方法中视图的宽度和高度是否可用?

【问题讨论】:

【参考方案1】:

在 onCreate() 中调用它

       final View rootView = getWindow().getDecorView().getRootView();
        rootView.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() 

                    @Override
                    public void onGlobalLayout() 

                        //by now all views will be displayed with correct values

                    
                );

【讨论】:

【参考方案2】:

onResume() 是最后一个,但也许更好的是 onViewCreated()。它的优点是每次重新获得焦点时都不会调用它。但是尝试在您需要的布局元素上通过 post() 获取视图的属性。例如:

        textView.post(new Runnable() 
            @Override
            public void run() 
                 // do something with textView
            
        );

【讨论】:

谢谢,我两个都试试!但在您看来,为什么第二个比第一个好? 不,您应该在 onViewCreated 中使用我的代码。 post() 是必需的,因为“此时片段的视图层次结构并未附加到其父级。”如果它仍然没有返回正确的结果,那么使用 postDelayed()。它很脏,但很简单而且很有效。 这里你也有同样的问题:***.com/questions/4074937/… 这不完全一样,因为我需要根据其他视图的参数来修改一些视图的布局,这些视图甚至不是同一个布局中的兄弟姐妹 没有调用 onViewCreated() 的方法。有 onCreateView() 但它在视图膨胀之前而不是之后被调用。【参考方案3】:

活动开始时运行的最后一个方法是onResume()。 你可以在Activity lifecycle找到它。

如果这对您来说还不够好,请从 onResume() 运行延迟任务,您会没事的。

【讨论】:

【参考方案4】:

在 onResume() 方法的最后一行获取你想要的所有数据。它应该向您展示您所需要的一切。

【讨论】:

以上是关于Android:创建活动接口后调用的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用接口android在适配器中创建onclick事件?

RN调用原生的方法

安装 Android SDK Build-Tools 26 后无法启动活动 ComponentInfo...

如何删除错误以在空对象引用上调用接口方法“boolean android.database.Cursor.moveToFirst()”

Android 中Native方法是怎样调用的

调用ondraw后重置画布,然后再在android中调用它