title: requestLayout() improperly called by CheckedTextView
body: <p>I got this error in logcat</p>
  
  <pre><code>03-11 15:09:43.403    2317-2317/com.manning.aip.mymovies W/View﹕ requestLayout() improperly called by android.widget.CheckedTextView{238af57c V.ED.... ......ID 0,0-540,96 #1020014 android:id/text1} during layout: running second layout pass
  </code></pre>
  
  <p>My app load StringArray from resources and display it in ListView</p>
  
  <p>This is my activity class that extends ListActivity</p>
  
  <pre><code>public class MyMovies extends ListActivity {
  
     private MovieAdapter adapter;
  
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
  
        setContentView(R.layout.main);
  
        ListView listView = getListView();
  
        Button backToTop =
                 (Button) getLayoutInflater().inflate(R.layout.list_footer, listView, false);
        backToTop.setCompoundDrawablesWithIntrinsicBounds(getResources()
                 .getDrawable(android.R.drawable.ic_menu_upload), null, null,
                 null);
        listView.addFooterView(backToTop, null, true);
  
        this.adapter = new MovieAdapter(this);
        listView.setAdapter(this.adapter);
        listView.setItemsCanFocus(false);
     }
  
     @Override
     protected void onListItemClick(ListView l, View v, int position, long id) {
        this.adapter.toggleMovie(position);
        this.adapter.notifyDataSetChanged();
     }
  
     public void backToTop(View view) {
        getListView().setSelection(0);
     }
  }
  </code></pre>
  
  <p>and this is adapter I'm using</p>
  
  <pre><code>public class MovieAdapter extends ArrayAdapter&lt;String&gt; {
  
  //   private HashMap&lt;Integer, Boolean&gt; movieCollection =
  //            new HashMap&lt;Integer, Boolean&gt;();
  // more memory efficient way of doing things
     private SparseBooleanArray movieCollection =
          new SparseBooleanArray();
  
     public MovieAdapter(Context context) {
        super(context, R.layout.movie_item, android.R.id.text1, context
                 .getResources().getStringArray(R.array.movies));
     }
  
     public void toggleMovie(int position) {
        if (!isInCollection(position)) {
           movieCollection.put(position, true);
        } else {
           movieCollection.put(position, false);
        }
     }
  
     public boolean isInCollection(int position) {
        return movieCollection.get(position) == Boolean.TRUE;
     }
  
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
  
        View listItem = super.getView(position, convertView, parent);
  
        CheckedTextView checkMark;
        ViewHolder holder = (ViewHolder) listItem.getTag();
        if (holder != null) {
           checkMark = holder.checkMark;
        } else {
           checkMark = (CheckedTextView) listItem.findViewById(android.R.id.text1);
           holder = new ViewHolder(checkMark);
           listItem.setTag(holder);
        }
  
        checkMark.setChecked(isInCollection(position));
  
        return listItem;
     }
  
     private class ViewHolder {
        protected final CheckedTextView checkMark;
  
        public ViewHolder(CheckedTextView checkMark) {
           this.checkMark = checkMark;
        }
     }
  }
  </code></pre>
  
  <p>Please help me solve this problem.</p>