2012-01-16 14 views
5

Mi clase abstracta se extendía desde Activity clase consiste en tres View s como se describe en el siguiente fragmento de XML:Cambiar vista contenido en la actividad dinámica

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@drawable/bg"> 

    <LinearLayout 
     android:id="@+id/top_border"> 
     ... 
    </LinearLayout> 

    <View 
     android:id="@+id/activity_content" 
     ... 
     /> 

    <LinearLayout 
     android:id="@+id/bottom_border"> 
     ...   
    </LinearLayout> 
</LinearLayout> 

Y en onCreate() método que puse este XML-diseño como ver el contenido.

Quiero el Activity s que extienda este para anular onCreate() y define el activity_content View bordes restantes inmutables.

Por ejemplo así:

abstract public class MyActivity extends Activity { 
    protected View mContent; 

    @Override 
    protected onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.common_layout); 
     initializeContent(); 
    } 

    abstract void initializeContent(); 
} 

class OneActivity extends MyActivity { 

    @Override 
    protected void initializeContent() { 
     mContent = View.inflate(this, R.layout.some_view, null); // i.e. concrete View (e.g. LinearLayout, FrameLayout, GridView, etc.) 
    } 
} 

Pero cuando hago lo que mi mContent siguen siendo los mismos como lo era cuando la he definido en MyActivity 's onCreate().

¿Cómo puedo cambiar el tipo/contenido de la vista depende de qué Activity está en primer plano?

+0

Hola, Si le he entendido bien lo que quiere es tener una plantilla con un poco de diseño fijo y algunos Dinamyc. Si es así te animo a usar Fragmentos. –

Respuesta

7

Primero cambie la vista en su diseño principal en un grupo de vista (por ejemplo, un LinearLayout). Entonces puede agregarle vistas. Si agrega una vista única, tendrá exactamente el efecto que desea lograr.

class OneActivity extends MyActivity { 
    @Override 
    protected void initializeContent() { 
     final ViewGroup viewGroup = (ViewGroup) findViewById(R.id.activity_content); 
     viewGroup.addView(View.inflate(this, R.layout.some_view, null)); 
    } 
} 

En su caso, eso debería funcionar. Si su grupo de vista personalizada contenía otros puntos de vista de más arriba en la jerarquía, se puede limpiar antes de añadir la vista personalizada:

viewGroup.removeAllViews(); 

Funciona, hago exactamente que en la mayoría de mis proyectos.

Una alternativa es mirar el Fragments API, disponible para las últimas versiones del SDK.

+0

¡Increíble! Muchas gracias))) – teoREtik

+0

Otro beneficio de usar un grupo de vistas es que puede modificar su diseño (fondo, ancho/alto, etc.) solo en un lugar, y todas sus actividades de subclases se verán afectadas. – Guillaume

0

No se puede reemplazar miembros de datos de clase en Java, métodos de uso en lugar

Cuestiones relacionadas