我的活动布局基本上是这样(简化以说明问题).如果设备的屏幕很小,则基本上没有足够的空间显示ListVIEw,因为其他视图占据了所有空间:
<linearLayout orIEntation="vertical"> <SomeBigVIEw layout_wIDth="match_parent" layout_height="680dp"/> <ListVIEw layout_wIDth="match_parent" layout_height="wrap_content" /></linearLayout>
我的活动代码按如下所示设置项目点击监听器:
List.onItemClickListener = AdapterVIEw.OnItemClickListener { _, vIEw, _, _ -> Snackbar.make(vIEw, "Clicked on $vIEw", Snackbar.LENGTH_SHORT).show()}
我的单元测试点击列表中的第一项:
val controller = Robolectric.buildActivity(MainActivity::class.java) .create().start().resume().visible()val List: ListVIEw = controller.get().findVIEwByID(R.ID.List)shadowOf(List).performItemClick(0)
使用Robolectric 4.2.1,我的点击侦听器将以非null视图进行调用.
在Robolectric 4.3中,使用空视图调用它.
解决方法:
摘要:
解决方案是使用@Config(qualifIErs =“ h780dp”)注释为此测试指定更大的设备高度.
细节:
经过一些调试后,我发现使用Robolectric 4.2.1时,ListVIEw的高度为146(顶部= 680,底部= 826),但是对于Robolectric 4.3,它的高度为0(顶部= 680,底部= 680). Robolectric使用的默认设备高度为470,这不足以显示列表.该列表在Robolectric 4.3中没有任何子视图.
从robolectric的ShadowAdapterVIEw中可以找到shadowOf(List).performItemClick(0)的实现,该实现为:
public boolean performItemClick(int position) { return realAdapterVIEw.performItemClick(realAdapterVIEw.getChildAt(position), position, realAdapterVIEw.getItemIDAtposition(position));}
在Robolectric 4.3中,getChildAt(position)返回null,这是转发给单击侦听器的内容.
解决方法是为该测试指定更大的设备屏幕.例如:
@Test@Config(qualifIErs="h780dp")
总结 以上是内存溢出为你收集整理的android-由于升级到Robolectric 4.3,所以ListView的onItemClickListener会获得空视图全部内容,希望文章能够帮你解决android-由于升级到Robolectric 4.3,所以ListView的onItemClickListener会获得空视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)