title: setVisibility(View.VISIBLE) doesn't always work. Ideas?
body: <p>I am trying to show a pair of hidden buttons (using <code>setVisibility(View.VISIBLE)</code>, within a <code>RelativeLayout</code>), but it doesn't always work. The button shows OK on a Galaxy Tab 10.1" but not in a smaller tablet (not sure which model), nor on an Android 4.0 emulator.</p>
  
  <p>I randomly discovered that, for a certain <code>TextView t</code>, the following code causes the buttons to become visible:</p>
  
  <pre><code>t.setText(t.getText());
  ...
  button.setVisibility(View.VISIBLE);
  </code></pre>
  
  <p><code>t</code> is located in the same <code>RelativeLayout</code> but is not related to the buttons (their locations are independent and non-overlapping).</p>
  
  <p><strong>Edit</strong>: In case some Android dev wants to track this down...</p>
  
  <p>I was able to reduce the code to the following layout that exhibits the problem on an Android 4.0.3 emulator but not a Galaxy Tab. I found that I need a <code>SurfaceView</code> or the problem does not occur (for example, change it to <code>TextView</code> and the problem disappears).</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;!-- layout/test.xml --&gt;
  &lt;RelativeLayout
      xmlns:android="http://schemas.android.com/apk/res/android"        
      android:id="@+id/relativeLayout"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" &gt;
  
      &lt;SurfaceView
          android:id="@+id/mapCtrl"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_above="@+id/bottomPanel"
          android:text="Placeholder"
          android:layout_marginTop="18dip" /&gt;
      &lt;TextView
          android:id="@+id/title"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentTop="true"
          android:layout_centerHorizontal="true"
          android:text="@string/map_mode_title" /&gt;
  
      &lt;!--=================================================--&gt;
      &lt;!-- Bottom bar: current road name and current speed --&gt;
      &lt;LinearLayout
          android:id="@+id/bottomPanel"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"
          android:background="#f228"
          android:orientation="horizontal"
          android:textColor="#ffff" &gt;
          &lt;Button
              android:id="@+id/btnNavMode"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:layout_marginRight="3dip"
              android:textColor="#fff"
              android:text="Switch to\nNav Mode" /&gt;
          &lt;RelativeLayout
              android:id="@+id/currentStreetPanel"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:onClick="onClick"
              android:clickable="true"
              android:orientation="vertical" &gt;
              &lt;TextView
                  android:id="@+id/currentStreetHdg"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentLeft="true"
                  android:layout_alignParentTop="true"
                  android:text="Current street"
                  android:textColor="#fff"
                  android:textSize="10dip" /&gt;
              &lt;TextView
                  android:id="@+id/currentStreet"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentLeft="true"
                  android:layout_below="@+id/currentStreetHdg"
                  android:layout_marginTop="-8dip"
                  android:singleLine="true"
                  android:text="Current street"
                  android:textColor="#fff"
                  android:textSize="30dip" /&gt;
          &lt;/RelativeLayout&gt;
          &lt;RelativeLayout
              android:id="@+id/RelativeLayout2"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:background="#ff606060"
              android:orientation="vertical" &gt;
              &lt;TextView
                  android:id="@+id/yourSpeedHdg"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentLeft="true"
                  android:layout_alignParentTop="true"
                  android:layout_marginLeft="3dip"
                  android:text="Your speed"
                  android:textColor="#fff"
                  android:textSize="10dip" /&gt;
              &lt;TextView
                  android:id="@+id/speed"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentLeft="true"
                  android:layout_below="@+id/yourSpeedHdg"
                  android:layout_marginLeft="3dip"
                  android:layout_marginTop="-8dip"
                  android:text="0"
                  android:textColor="#fff"
                  android:textSize="30dip" /&gt;
              &lt;TextView
                  android:id="@+id/speedUnit"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignBaseline="@+id/speed"
                  android:layout_marginLeft="5dip"
                  android:layout_toRightOf="@+id/speed"
                  android:text="kph"
                  android:textColor="#fff"
                  android:textSize="18dip" /&gt;
          &lt;/RelativeLayout&gt;
      &lt;/LinearLayout&gt;
  
      &lt;!--================--&gt;
      &lt;!-- On-map buttons --&gt;
      &lt;Button
          android:id="@+id/btnClearRoute"
          android:background="#F00"
          android:textColor="#fff"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Clear\nroute"/&gt;
      &lt;ZoomControls
          android:id="@+id/zoomControls"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignBottom="@+id/mapCtrl"
          android:layout_centerHorizontal="true"
          android:layout_marginBottom="-25dip"
          android:orientation="horizontal" /&gt;
      &lt;Button
          android:id="@+id/btnFindRoute"
          android:layout_width="100dip"
          android:layout_height="wrap_content"
          android:layout_alignBottom="@+id/mapCtrl"
          android:layout_alignParentRight="true"
          android:layout_marginRight="2dip"
          android:layout_marginBottom="65dip"
          android:text="Route to selected location"
          android:textSize="17dip"/&gt;
      &lt;Button
          android:id="@+id/btnUnselect"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignBottom="@+id/btnFindRoute"
          android:layout_alignTop="@+id/btnFindRoute"
          android:layout_alignParentLeft="true"
          android:layout_marginLeft="2dip"
          android:text="Unselect" /&gt;
      &lt;LinearLayout
          android:id="@+id/showMePanel"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_above="@+id/btnFindRoute"
          android:layout_alignRight="@+id/btnFindRoute"
          android:layout_alignLeft="@+id/btnFindRoute"
          android:padding="4dip"
          android:background="#bbbb"
          android:gravity="center"
          android:orientation="vertical"&gt;
          &lt;TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Show me..."
              android:textColor="#fff"/&gt;
          &lt;Button
              android:id="@+id/btnShowVehicle"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="My car"/&gt;
          &lt;Button
              android:id="@+id/btnShowRoute"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="The route"/&gt;
          &lt;Button
              android:id="@+id/btnShowDestination"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="Destination"/&gt;
          &lt;Button
              android:id="@+id/btnShowMap"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="The map"/&gt;
      &lt;/LinearLayout&gt;
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p>The Activity class simply toggles the visibility of the two buttons when any of the buttons are clicked. Again, on some devices it works, on others it does not.</p>
  
  <pre><code>package mentor.simplegps;
  
  import android.app.*;
  import android.os.Bundle;
  import android.view.*;
  import android.widget.*;
  
  public class TestActivity extends Activity implements View.OnClickListener
  {
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          setContentView(R.layout.test);
          boilerplate();
          setVisibilities();
      }
  
      Button _btnShowMap, _btnShowVehicle, _btnShowRoute, _btnShowDestination;
      Button _btnUnselect, _btnFindRoute, _btnNavMode;
      TextView _title;
  
      void boilerplate()
      {
          _btnUnselect = attachBtn(R.id.btnUnselect);
          _btnShowMap = attachBtn(R.id.btnShowMap);
          _btnShowVehicle = attachBtn(R.id.btnShowVehicle);
          _btnShowRoute = attachBtn(R.id.btnShowRoute);
          _btnShowDestination = attachBtn(R.id.btnShowDestination);
          _btnFindRoute = attachBtn(R.id.btnFindRoute);
          _btnNavMode = attachBtn(R.id.btnNavMode);
          _title = (TextView)findViewById(R.id.title);
      }
      private Button attachBtn(int btnId) {
          Button b = (Button)findViewById(btnId);
          b.setOnClickListener(this);
          return b;
      }
  
      boolean haveSel;
      public void onClick(View v)
      {
          haveSel = !haveSel;
          setVisibilities();
      }
      void setVisibilities()
      {
          _btnFindRoute.setVisibility(haveSel ? View.VISIBLE : View.INVISIBLE);
          _btnUnselect.setVisibility (haveSel ? View.VISIBLE : View.INVISIBLE);
  
          // Fixes the problem
          //_title.setText(_title.getText());
      }
  }
  </code></pre>