PDA

Ver la Versión Completa : Navigation Drawer y Fragmentos


Int32
13/04/14, 11:51:25
Hola buenos días, estoy realizando el proyecto de fin de curso y quiero hacer una app que me valga tanto para móvil como tableta, mi problema surge que al implementar el navigation drawer pincho en una opcion del menú y quiero abrir un fragmentos con un listvew y otro con detalles si estoy en tableta y solo el listview si estoy en móvil, siguiendo la información de Google he hecho los diseños pero me da problema al hacer la transición de fragmentos no me carga nada.

kriogeN
13/04/14, 12:52:50
Doy por supuesto que no es la primera vez que trabajas con Fragments y que sabes como se hace una transición de Fragments en un FrameLayout.

Dicho esto, el problema que tienes tú, de tener unos Fragments para móvil y otros para tablet, lo solucioné así:

Creas un Layout para móvil (normal, sin nada, simplemente carpeta "layout") y otra para tablet "layout-sw600dp" (en este caso será para tablets de 7'', pero las de 10'' también lo cogerán de ahí). En las 2 tendrás un FrameLayout llamado "listado" (por ejemplo), pero sólo en la de tablet tendrás otro llamado "detalles" (por ejemplo).

Y ya en el código lo único que tienes que hacer es comprobar si tienes disponible el FrameLayout de detalles para hacerle la transición:

if (findViewById(R.id.detalles) != null) {
//SOY TABLET
}
else {
//SOY MOVIL
}

Int32
14/04/14, 23:51:01
Sigo teniendo problemas, tengo mi MainActivity que hereda de FragmentActivity y en las opciones del menu al hacer click hago lo siguiente:

lvdrawer.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int posicion, long id) {
Fragment fragment = null;

switch (posicion) {
case 0:
fragment = new Principal();
break;

}
FragmentManager fragmentManager = getSupportFragmentManager();

fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
drawerLayout.closeDrawers();
}
});

Principal es una clase que hereda de tambien de FragmentActivity y donde compruebo si estoy en tableta o movil.

public class Principal extends FragmentActivity
implements HeadlinesFragment.OnHeadlineSelectedListener {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);

if (findViewById(R.id.fragment_container) != null) {

if (savedInstanceState != null) {
return;
}

HeadlinesFragment firstFragment = new HeadlinesFragment();

firstFragment.setArguments(getIntent().getExtras() );

getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();


Tendria que hacer la comprobacion antes cuando hago el click? estoy un poco perdida.

kriogeN
15/04/14, 11:04:53
Lo que no entiendo es como te compila, porque estás tratando de meter un FragmentActivity dentro de un Fragment:

fragment = new Principal();

public class Principal extends FragmentActivity

Para que funcione Principal debe ser un Fragment, no un FragmentActivity

Int32
15/04/14, 15:09:20
No me compila me da error...
Pero si lo pongo como Fragment como haria la comprobacion de movil.
o tablet, siguiendo la informacion de google ponia que tenia que ser un fragment activity

Pero voy a probar a ver.

Int32
15/04/14, 16:19:20
Nada no hay manera...

kriogeN
15/04/14, 17:19:55
Para que funcione Principal tiene que ser un Fragment, porque un FragmentActivity es un tipo de Activity que incorpora al FragmentManager para poder hacer las transiciones. Un Fragment no tiene nada que ver con un FragmentActivity.

Int32
16/04/14, 11:11:21
Entiendo lo que quieres decirme y es lógico pero mi problema es que tengo un proyecto con principal que es un fragmentos acrivity, un fragmento listado y otro de detalle y me funciona bien si lo ejecuto en móvil o tabletas se ve como quiero, ahora el problema es que quiero incorporarlo al proyecto donde esta el navigation drawer es posible cargar principal? O tendría que hacerlo de otra forma?