Android: ¿está utilizando setContentView varias veces mal al cambiar los diseños?

está usando setContentView varias veces mal al cambiar los diseños?

Algunas personas dicen que es malo y nunca dicen por qué.

y hay alguna otra cosa para cambiar el diseño con el botón?

Echemos un vistazo a los documentos de Android :

Establezca el contenido de la actividad en una vista explícita. Esta vista se coloca directamente en la jerarquía de vista de la actividad.

Por lo tanto, setContentView sobrescribirá el diseño y lo reemplaza por uno nuevo. Por lo general, solo desea hacer esto una vez en Crear. Teóricamente, podría hacerlo más, pero implica volver a dibujar todo el diseño, y esto podría llevar algo de tiempo. Hay algunas alternativas, dependiendo de exactamente lo que quiere:

  1. ViewAnimator : esto es útil para mostrar una animación rápida, si desea cambiar la vista varias veces en sucesión rápida.
  2. Fragmentos : en lugar de volver a dibujar la vista completa, puede cambiar los fragmentos. Cada fragmento es un tipo de mini actividad, y en general, este contendrá el código mucho mejor.
  3. Pasar argumentos de intención : pasar información a una actividad para ayudar a configurarla. La primera actividad pasa información a una segunda actividad común, que sabe cómo establecerse en función de la información que recibe de la primera actividad.

En cuanto a su aplicación específica, esto es lo que haría:

  1. Cada banda sigue un diseño específico. Solo hay 1, o quizás algunos diseños posibles.
  2. Cuando comienza la actividad de la Banda, se elige el diseño apropiado y se rellena, sabiendo lo que hay allí.

El SDK de Android muestra cómo pasar datos de una actividad a otra. Simplemente pase los datos que la segunda actividad necesita de la primera, usando algo como esto:

 Intent intent=new Intent(...); intent.putExtra("Album","Some Album") startActivity(intent); 

La segunda actividad hará esto:

 Intent intent=getIntent(); String albumName=intent.getExtraString("Album"); //Does something with albumName, maybe get a TextView and .setText() 

No puedo mostrar el ejemplo porque estoy esperando una respuesta para hacerlo. está bien, tengo la aplicación de letras (mostrará las letras de la banda) y los álbumes son actividades nuevas, pero no quiero muchas actividades y por eso quiero hacer diseños de canciones y cambiar las vistas solo con el botón.

Parece que estás haciendo esto de la manera incorrecta. Si desea cambiar la interfaz de usuario que contiene una Activity , entonces Fragment s sería el mejor enfoque. Aquí hay un poco de curva de aprendizaje, pero es un buen diseño de Android, y está bien documentado .

Además, parece confundir el formato y el contenido. Si está mostrando letras de canciones, no necesita un nuevo diseño para cada canción. Solo necesitas cambiar las letras y mantenerlas en la misma actividad. Lo que estás haciendo es similar a crear un nuevo navegador web para cada página web que quieras visitar. En su lugar, encuentre una forma de almacenar las letras y mostrarlas en una sola actividad (o en un fragmento) para mostrar esas letras. Lo mismo se aplicaría a cada álbum: una actividad mostraría la portada del álbum en la esquina (o como fondo), el título, fecha de lanzamiento, etc., como texto, y luego una lista de canciones a continuación. El contenido real de TextView puede cambiar, pero el diseño debe ser el mismo.

Sí, esto es malo, porque infla tu actividad con tu diseño, y si tu diseño tiene muchas vistas, puede llevar tiempo.

Para evitar eso, debe usar un ViewAnimator , donde pone todos sus diseños y cambia por showNext () y showPrevious (), es decir:

       

Y en tu código:

 // Don't forget the setContentView // // Load the ViewAnimator and display the first layout ViewAnimator va = (ViewAnimator) findViewById(R.id.ViewAnimator); // Switch to the second layout va.showNext(); // Add another layout at the third position LinearLayout fooLayout = new LinearLayout(this); va.addView(fooLayout, 3, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));