Android: requestLayout() improperly called

android, android-listview, performance

Solution

This issue seems to be a bug in the android implementation, please see: https://code.google.com/p/android/issues/detail?id=75516

Activating the fast scroll feature of a `ListView` in your code via `ListView.setFastScrollEnabled(true)` will trigger this bug and you'll start seeing the

requestLayout() improperly called by android.widget.TextView{...} during layout: running second layout pass

message in your console.

This bug must have been introduced in one of the KitKat (4.4.x) updates, as I've not seen it with the initial KitKat (4.4.0) release. Apart from the ugly console spamming with the debug message from above, there seem to be no other impacts (maybe performance in some cases, which I haven't tested).

Cheers

PS: it's not the first time that the fast scroll feature is bugged, e.g. https://code.google.com/p/android/issues/detail?id=63545, 63545 was fixed in KitKat 4.4.3 but 75516 poped up thereafter --> seems to be a vexed subject for google ;-)

EDIT May 12 2015:

I updated my Nexus 7 to Android 5.1 some minutes ago (was Running 5.0 before) and stopped seeing this issue in this new version. As the appearance of the FastScroll indicator also changed in 5.1, I assume that google fixed this issue or at least commented out those ugly lines that spammed the console...

75516 & 82461 are still 'unresolved', but I guess that those refer to the same issue, that's now resolved in 5.1.

Problem

The following error occurs when I attempt to inflate a layout within a `ListView`: ``` requestLayout() improperly called by android.widget.TextView{...} during layout: running second layout pass ``` I am attempting to inflate a layout within a `ListView` as follows: ``` @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{...} } ``` The layout being inflated can look as simple as the following, and will still produce the error ``` <TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/txt_size"/> ``` I have looked into similar questions, and no solutions found seem to work Question 1, Question 2, Question 3. Does anyone know what causes this type of error? Any troubleshooting advice? For more context, this `ListView` is displayed within a `Fragment` within a `ViewPager` UPDATE Here is the full XML Layout (minus a bunch of attributes), that still results in the problem ``` <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> ``` Based on this, I would think the XML itself is not a problem, unless it has to do with the fact that I am using a ViewPager and Fragments

Original source

Related problems