Android 无需采取任何操作的测量无限循环视图

Android 无需采取任何操作的测量无限循环视图,android,android-layout,Android,Android Layout,首先,我想向你们保证,我已经阅读了大量关于SO的类似帖子,我的问题还没有找到答案 所以,问题是(或者我应该说是问题): 我有一个列表视图,里面有非常复杂的项目,包括文本视图、按钮、编辑文本。所有这些项目都是动态生成的。是的,我有你在Android开发中能想象到的最糟糕和最糟糕的东西(有这样的词吗?)。所以,为了控制这些乱七八糟的东西,我有一台地狱机器,它保存着关于焦点的所有信息,编辑文本中光标的位置和其他很酷的东西。这真的是一大堆代码,我相信你们中没有人想看到它,而且这也是最高机密(开玩笑) 所

首先,我想向你们保证,我已经阅读了大量关于SO的类似帖子,我的问题还没有找到答案

所以,问题是(或者我应该说是问题): 我有一个列表视图,里面有非常复杂的项目,包括文本视图、按钮、编辑文本。所有这些项目都是动态生成的。是的,我有你在Android开发中能想象到的最糟糕和最糟糕的东西(有这样的词吗?)。所以,为了控制这些乱七八糟的东西,我有一台地狱机器,它保存着关于焦点的所有信息,编辑文本中光标的位置和其他很酷的东西。这真的是一大堆代码,我相信你们中没有人想看到它,而且这也是最高机密(开玩笑)

所以,问题来了。当我点击编辑文本在其中键入smth时,适配器的方法getView()开始被无限地调用大约200次(即在循环中)。虽然,它不会影响文本输入或其他东西,但这是完全不正常的。在调试时,我看到onMeasure()方法最终调用了我的getView(),然后(出于某种原因)进入了一个循环

所以我的问题是:这怎么可能,onMeasure进入一个循环?我只是点击编辑文本,其他什么都没有,我不在其中输入任何数据,我不滚动我的列表,我甚至不触摸我的手机,它也不会自动移动

我觉得我自己很抱歉没有给你我所有的代码,所以至少我会给你onMeasure()方法的堆栈跟踪


这是因为ListView的布局高度值=包裹内容。将此设置为“填充父项”解决了此问题

StaticLayout(Layout).getWidth() line: 537   
TextView.onMeasure(int, int) line: 6188 
TextView(View).measure(int, int) line: 15172    
LinearLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4816    
LinearLayout.measureChildBeforeLayout(View, int, int, int, int, int) line: 1390 
LinearLayout.measureHorizontal(int, int) line: 1038 
LinearLayout.onMeasure(int, int) line: 576  
LinearLayout(View).measure(int, int) line: 15172    
HorizontalScrollView.measureChildWithMargins(View, int, int, int, int) line: 1216   
HorizontalScrollView(FrameLayout).onMeasure(int, int) line: 310 
HorizontalScrollView.onMeasure(int, int) line: 299  
HorizontalScrollView(View).measure(int, int) line: 15172    
RelativeLayout.measureChildHorizontal(View, RelativeLayout$LayoutParams, int, int) line: 617    
RelativeLayout.onMeasure(int, int) line: 399    
RelativeLayout(View).measure(int, int) line: 15172  
FrameLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4816 
FrameLayout.onMeasure(int, int) line: 310   
FrameLayout(View).measure(int, int) line: 15172 
LinearLayout.measureVertical(int, int) line: 833    
LinearLayout.onMeasure(int, int) line: 574  
LinearLayout(View).measure(int, int) line: 15172    
PhoneWindow$DecorView(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4816   
PhoneWindow$DecorView(FrameLayout).onMeasure(int, int) line: 310    
PhoneWindow$DecorView.onMeasure(int, int) line: 2220    
PhoneWindow$DecorView(View).measure(int, int) line: 15172   
ViewRootImpl.performMeasure(int, int) line: 1850    
ViewRootImpl.measureHierarchy(View, WindowManager$LayoutParams, Resources, int, int) line: 1102 
ViewRootImpl.performTraversals() line: 1275 
ViewRootImpl.doTraversal() line: 1000   
ViewRootImpl$TraversalRunnable.run() line: 4214 
Choreographer$CallbackRecord.run(long) line: 725    
Choreographer.doCallbacks(int, long) line: 555  
Choreographer.doFrame(long, int) line: 525  
Choreographer$FrameDisplayEventReceiver.run() line: 711 
Handler.handleCallback(Message) line: 615   
Choreographer$FrameHandler(Handler).dispatchMessage(Message) line: 92   
Looper.loop() line: 137 
ActivityThread.main(String[]) line: 4787    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 511  
ZygoteInit$MethodAndArgsCaller.run() line: 789  
ZygoteInit.main(String[]) line: 556 
NativeStart.main(String[]) line: not available [native method]