android setVisibility non viene visualizzato se inizialmente impostato su invisibile

Ho una glsurface che occupa tutto lo schermo. Con il clic di un pulsante voglio che venga visualizzato un altro layout (tipo di impostazioni della cosa). Se inizio con la sovrapposizione visibile, posso renderla invisibile e quindi visibile di nuovo senza problemi. Ma se inizio con esso invisibile, non posso renderlo mai più visibile. Il codice segue:

        

    Aveva un errore simile ma era dovuto al mio stupido errore di non usare l’UiThread.

     Activity act = (Activity)context; act.runOnUiThread(new Runnable(){ @Override public void run() { mLayoutLights.setVisibility(View.VISIBLE); } }); 

    Fatto. Devi impostare la visibilità di tutti gli elementi nel layout, non solo il layout. Quindi questo codice ha funzionato:

     if (mLayoutLights.getVisibility() == View.VISIBLE) { ((Button) findViewById(R.id.btnLightsOK)).setVisibility(View.GONE); ((Button) findViewById(R.id.btnLightsCnc)).setVisibility(View.GONE); mLayoutLights.setVisibility(View.GONE); } else { mLayoutLights.setVisibility(View.VISIBLE); ((Button) findViewById(R.id.btnLightsOK)).setVisibility(View.VISIBLE); ((Button) findViewById(R.id.btnLightsCnc)).setVisibility(View.VISIBLE); } 

    Nel mio caso, con un semplice SurfaceView, ho appena impostato la vista su GONE in xml, non INVISIBLE. Quindi posso impostare VISIBILITY correttamente dopo.

    Suggerirei di provare tre cose indipendenti.

    1. Modifica della larghezza e dell’altezza del layout per avvolgere il contenuto in quanto potrebbe essere un problema con la corrispondenza del genitore.
    2. Chiamando bringToFront sulla vista
    3. Avvolgere il surfaceView in un FrameLayout (questo è legato al n. 2, ma potrebbe comunque aiutare)

    se si imposta CalendarView su visibilità “VISIBLE” e su inflateView / OnCreateView dopo averlo trovato con “findById”, impostare su “GONE” e si può fare ciò che si desidera con esso.

    calendarView = (CalendarView) view.findViewById (R.id.all_scores_calendar_view); calendarView.setVisibility (View.GONE);

    calendarView.setVisibility (View.VISIBLE);

    Basta impostare le proprietà width e height su “fill_parent” invece di “match_parent”. Non è necessario impostare la visibilità per tutti i bambini, ma solo per il contenitore / elemento di livello superiore.

     case R.id.title_call_button: if(llButtonCallNow.getVisibility() != View.VISIBLE){ llButtonCallNow.setVisibility(View.VISIBLE); } else{ llButtonCallNow.setVisibility(View.GONE); Toast.makeText(getBaseContext(), ("Im here baby :)"), Toast.LENGTH_SHORT).show(); } break;