Dai*_*run 42 performance android android-listview
当我尝试在以下内容中扩充布局时发生以下错误ListView:
requestLayout() improperly called by android.widget.TextView{...} during layout: running second layout pass
Run Code Online (Sandbox Code Playgroud)
我试图在一个内部膨胀布局ListView如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) musicActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, parent, false);
...
}else{...}
}
Run Code Online (Sandbox Code Playgroud)
膨胀的布局可以看起来像下面这样简单,并且仍然会产生错误
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/txt_size"/>
Run Code Online (Sandbox Code Playgroud)
我已经研究了类似的问题,找不到任何解决方案似乎工作问题1,问题2,问题3.
有谁知道导致此类错误的原因是什么?任何疑难解答建议 对于更多上下文,它ListView显示在a Fragment内ViewPager
这是完整的XML布局(减去一堆属性),仍然会导致问题
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
基于此,我认为XML本身不是问题,除非它与我使用ViewPager和Fragments这一事实有关
dar*_*aga 41
这个问题似乎是Android实现中的一个错误,请参阅:https://code.google.com/p/android/issues/detail?id = 75516
激活ListView代码中a的快速滚动功能ListView.setFastScrollEnabled(true) 将触发此错误,您将开始看到
requestLayout()在布局期间由android.widget.TextView {...}不正确地调用:运行第二个布局传递
控制台中的消息.
这个bug必须在其中一个KitKat(4.4.x)更新中引入,因为我没有在最初的KitKat(4.4.0)版本中看到它.除了丑陋的控制台垃圾邮件与上面的调试消息,似乎没有其他影响(在某些情况下可能性能,我还没有测试).
干杯
PS:这不是第一次快速滚动功能被窃听,例如https://code.google.com/p/android/issues/detail?id=63545,63545已在KitKat 4.4.3中修复但75516加速了此后 - >似乎是谷歌的烦恼主题;-)
编辑2015年5月12日:
几分钟前我将Nexus 7更新为Android 5.1(之前运行的是5.0)并且在这个新版本中停止了这个问题.由于FastScroll指标的外观在5.1中也发生了变化,我认为google修复了这个问题,或者至少注释掉了那些垃圾邮件控制台的丑陋线条......
75516和82461仍然"尚未解决",但我猜这些问题引用了同样的问题,现在已经在5.1中解决了.
axl*_*der 18
问题是,当getView()您的适配器的方法显示您的布局时,其他一些代码正试图访问此视图以显示它,从而导致冲突.
请注意,某些方法,也许你没有照顾(比如setScale(),setTypeFace())确实调用requestLayout(),所以在你的膨胀声明后你正在做的事情会很有趣.
我通过在XML中禁用ListView上的fastScroll来修复此问题.
<ListView
android:id="@+id/mListview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:fastScrollEnabled="false"
/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48225 次 |
| 最近记录: |