2010-07-26 11 views

Respuesta

319

Puede reemplazar cualquier vista en cualquier momento.

int optionId = someExpression ? R.layout.option1 : R.layout.option2; 

View C = findViewById(R.id.C); 
ViewGroup parent = (ViewGroup) C.getParent(); 
int index = parent.indexOfChild(C); 
parent.removeView(C); 
C = getLayoutInflater().inflate(optionId, parent, false); 
parent.addView(C, index); 

Si no desea reemplazar ya Ver existente, sino elegir entre option1/opcion2 en tiempo de inicialización, entonces se podría hacer esto más fácil: juego de android:id para la disposición de los padres y luego:

ViewGroup parent = (ViewGroup) findViewById(R.id.parent); 
View C = getLayoutInflater().inflate(optionId, parent, false); 
parent.addView(C, index); 

Deberá establecer el "índice" en el valor correcto según la estructura de las vistas. También es posible usar un ViewStub: añada su vista como C y luego ViewStub:

ViewStub C = (ViewStub) findViewById(R.id.C); 
C.setLayoutResource(optionId); 
C.inflate(); 

De esa manera usted no tendrá que preocuparse por "índice" por encima del valor si tendrá que reestructurar su diseño XML.

+0

¿Debo eliminar el fragmento, o el fragmento también se eliminará? –

+3

@KarlMorrison Esta pregunta tiene casi 4 años y no tiene nada que ver con fragmentos. Sugiero que presente una nueva pregunta y/o consulte 'android.app.FragmentTransaction' y su método' replace() '. – lupz

+0

Es una pena que su respuesta sea demasiado compleja - en los comentarios - para programadores de Android noveles :-( –

36

Y si lo hace muy a menudo, puede usar ViewSwitcher o ViewFlipper para facilitar la sustitución de la vista.

+0

Sí, si hay dudas sobre las vistas alternativas, entonces es mejor usar flipper/switcher para usar – Zoombie

+7

@snicolas ... ¿puede explicarlo con algún código, por favor? –

+2

@Shail Adi, ¿has intentado utilizar un código tutorial de ViewSwitcher? – Snicolas

Cuestiones relacionadas