我的片段中有以下代码:
public void someMethod()
{
scrollView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
// code that I want to test
}
}
}
但是,当我尝试测试此方法时,我无法在GlobalLayoutListener中运行代码。我尝试以不同的方式强制执行监听器,但是当我检查调试时,scrollerView没有任何GlobalLayoutListeners。
我要测试的代码是在Fragment中,这是我在测试中已经尝试过的:
SupportFragmentTestUtil.startVisibleFragment( fragment );
fragment.scrollView.getViewTreeObserver().dispatchOnGlobalLayout();
我也尝试过:
shadowOf(fragment.scrollView.getViewTreeObserver()).fireOnGlobalLayoutListeners();
然而,侦听器内的代码永远不会被执行。
答案 0 :(得分:2)
我通过使用以下参数手动调用Fragment的 createView 方法来解决此问题:
FrameLayout container = new FrameLayout( RuntimeEnvironment.application );
fragment.createView( LayoutInflater.from( RuntimeEnvironment.application ), container );
FrameLayout container = new FrameLayout( RuntimeEnvironment.application );
fragment.createView( LayoutInflater.from( RuntimeEnvironment.application ), container );
最终添加了globalLayoutListener,当我执行以下代码时, onGlobalLayout()方法正确执行:
shadowOf( fragment.scrollView.getViewTreeObserver() ).fireOnGlobalLayoutListeners();