La extensión es la manera correcta. Simplemente anule setContentView de la manera correcta. Aquí está el ejemplo de trabajo, pero en lugar de cajón, yo uso un creado una barra de pestañas personalizado:
definir un diseño con su cajón de la siguiente manera:
esto es act_layout.xml
<LinearLayout
...
android:orientation="vertical"
>
<YourDrawer
...
/>
<FrameLayout
android:id="@+id/act_content"
...
>
// Here will be all activity content placed
</FrameLayout>
</LinearLayout>
Ésta será su diseño base para contener todos los demás diseños en el marco act_content. A continuación, cree una clase de actividad de base, y haga lo siguiente:
public abstract class DrawerActivity extends Activity {
protected LinearLayout fullLayout;
protected FrameLayout actContent;
@Override
public void setContentView(final int layoutResID) {
// Your base layout here
fullLayout= (LinearLayout) getLayoutInflater().inflate(R.layout.act_layout, null);
actContent= (FrameLayout) fullLayout.findViewById(R.id.act_content);
// Setting the content of layout your provided to the act_content frame
getLayoutInflater().inflate(layoutResID, actContent, true);
super.setContentView(fullLayout);
// here you can get your drawer buttons and define how they
// should behave and what must they do, so you won't be
// needing to repeat it in every activity class
}
}
Lo que hacemos, es básicamente interceptar todas las llamadas a setContentView (int resid), inflar nuestra disposición para el cajón de XML, inflar nuestra disposición para la actividad (mediante reId proporcionado en la llamada al método), combínelos según lo necesitemos y configúrelos como contentView de la actividad.
EDIT: Después de crear las cosas arriba, solo procederá a escribir una aplicación como de costumbre, crear diseños (sin ninguna mención de un cajón) crear actividades, pero en lugar de extender la actividad simple, se extienden DrawerActivity, de este modo:
public abstract class SomeActivity extends DrawerActivity {
protected void onCreate(Bundle bundle) {
setContentView(R.layout.some_layout);
}
}
¿Qué ocurre, es que setContentView (R.layout.some_layout) es interceptada. Your DrawerActivity carga el diseño que proporcionó desde xml, carga un diseño estándar para su cajón, los combina y luego lo configura como contentView para la actividad.
gracias por su respuesta, pero no entiendo el tema, por favor, explíqueme más, hice lo que me dijo, creé una clase para dibujar el cajón deslizante y lo extiendo a otra clase la salida es que tengo el cajón correctamente en la pantalla, pero no puedo establecer la vista de la actividad del niño, ¿cómo podría hacer eso? – Zak
Lo más importante es combinar 2 diseños (de actividad y el que está en el cajón) en 1 y solo luego configúralo con setContentView. Lo que sugiero es inflar ambos diseños desde xml (de esa manera aún no se llama a setContentView) combínelos programáticamente de la forma que desee y luego llame a setContentView (your_combinet_view). Es lo que hice cuando superé el setContentView en DrawerActivity. Agregaré el ejemplo de una actividad simple que debe ampliarlo. –
cansé tu sugerencia y los combiné como lo hiciste en el ejemplo proporcionado y de la clase hija llamo al setContentView y le paso el ID de raíz del xml de mi nueva actividad public class AlJazeera extends MenuSlider { \t Context ctx = this ; \t protegido FrameLayout Layout; /** Se invoca cuando se crea la actividad por primera vez. */ @Override public void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.id.idl); } } – Zak