Avisos

Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 30/12/15, 12:45:28
Array

[xs_avatar]
4ris 4ris no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: jun 2011
Mensajes: 80
Modelo de smartphone: Motorola defy
Tu operador: Movistar
Contenido en layout que no se extienda en sus Fragment

Buenas, sería posible que mi layout del cual extienden Fragments no mostrara parte del contenido original?

No se si me explico, cualquier cosa me decís, gracias ^^
Responder Con Cita


  #2  
Viejo 30/12/15, 13:22:04
Array

[xs_avatar]
beta tester beta tester no está en línea
Miembro del foro
 
Fecha de registro: mar 2015
Mensajes: 166
Modelo de smartphone: OnePlus 5

Un Layout del que extienden Fragments? No te entiendo muy bien... Creo que un poco de código ayudaría a comprenderlo mejor y poder ayudarte
Responder Con Cita
  #3  
Viejo 30/12/15, 15:28:24
Array

[xs_avatar]
4ris 4ris no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: jun 2011
Mensajes: 80
Modelo de smartphone: Motorola defy
Tu operador: Movistar
 Cita: Originalmente Escrito por beta tester Ver Mensaje
Un Layout del que extienden Fragments? No te entiendo muy bien... Creo que un poco de código ayudaría a comprenderlo mejor y poder ayudarte
Gracias compi!

Te comento, seguí este tutorial de aquí: http://www.sgoliver.net/blog/interfa...gation-drawer

La cosa es que lo primero que se visualiza es el activity_main.xml, y si quiero añadir algo ahí, se ve en todos los Fragment que abro desde el navigator drawer. Y lo que quiero es que en la primera pantalla que se muestra al abrir la (activity_main.xml) se vea el contenido que yo quiera.

Un saludo
Responder Con Cita
  #4  
Viejo 30/12/15, 15:46:45
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Yo tampoco termino de entender lo que quieres, pero a ver si fuese esto...

Tienes un contenido en el Activity, y luego cuando seleccionas un Fragment quieres que lo el contenido que estaba en el Activity no se vea, ¿es eso?

Tienes 2 posibles soluciones:

A) Que el contenido inicial también sea un Fragment, que estableces en el onCreate del Activity y luego reemplazas por el resto de Fragments. Así ese contenido desaparecerá al seleccionar un nuevo Fragment.

B) Establecer en el orden del Layout de la Activity que el Fragment siempre va a ocupar todo el espacio del Activity quieres tapar, por ejemplo:

<RelativeLayout
..........>
<RelativeLayout
......>
//Contenido del Activity que luego quieres que desaparezca
</RelativeLayout>
<FrameLayout
......./> // Espacio reservado para el Fragment.

Y que en ambos Layout sean match_parent para ambos casos. Y por último, pero no menos importante, asegúrate que el fondo del Fragment sea de un color sólido (o una imagen no transparente), para que así no se vea lo que está por debajo.
Responder Con Cita
  #5  
Viejo 30/12/15, 15:55:57
Array

[xs_avatar]
beta tester beta tester no está en línea
Miembro del foro
 
Fecha de registro: mar 2015
Mensajes: 166
Modelo de smartphone: OnePlus 5

Bien... yo lo haría de esta manera: en el activity_main.xml simplemente tendría, por ejemplo, un LinearLayout que utilizaría como contenedor, y en el que iría cargando los Fragments correspondientes a cada una de las secciones, con el contenido que quieras en cada uno de ellos.

Cualquier elemento incluido en el activity_main.xml que no sea el propio contenedor de Fragments, lógicamente, se mostrará en todas las secciones de tu aplicación.

Con un poco de código igual queda más claro:

Sólo contenedor

Código:
<LinearLayout 
  android:id="contenedor"
  ... />
Contenedor y más elementos

Código:
<LinearLayout ... >

    <TextView ... />

    <LinearLayout 
      android:id="contenedor"
      ... />

</LinearLayout>
La primera opción sería la que te comentaba antes, mientras que en la segunda siempre tendrías un TextView más el contenido del Fragment que incluyas.

Espero haberme explicado bien
Responder Con Cita
  #6  
Viejo 30/12/15, 16:54:01
Array

[xs_avatar]
4ris 4ris no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: jun 2011
Mensajes: 80
Modelo de smartphone: Motorola defy
Tu operador: Movistar
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Yo tampoco termino de entender lo que quieres, pero a ver si fuese esto...

Tienes un contenido en el Activity, y luego cuando seleccionas un Fragment quieres que lo el contenido que estaba en el Activity no se vea, ¿es eso?

Tienes 2 posibles soluciones:

A) Que el contenido inicial también sea un Fragment, que estableces en el onCreate del Activity y luego reemplazas por el resto de Fragments. Así ese contenido desaparecerá al seleccionar un nuevo Fragment.

B) Establecer en el orden del Layout de la Activity que el Fragment siempre va a ocupar todo el espacio del Activity quieres tapar, por ejemplo:

<RelativeLayout
..........>
<RelativeLayout
......>
//Contenido del Activity que luego quieres que desaparezca
</RelativeLayout>
<FrameLayout
......./> // Espacio reservado para el Fragment.

Y que en ambos Layout sean match_parent para ambos casos. Y por último, pero no menos importante, asegúrate que el fondo del Fragment sea de un color sólido (o una imagen no transparente), para que así no se vea lo que está por debajo.
Vale, lo entiendo pero tal vez no sea el modo más óptimo no?

 Cita: Originalmente Escrito por beta tester Ver Mensaje
Bien... yo lo haría de esta manera: en el activity_main.xml simplemente tendría, por ejemplo, un LinearLayout que utilizaría como contenedor, y en el que iría cargando los Fragments correspondientes a cada una de las secciones, con el contenido que quieras en cada uno de ellos.

Cualquier elemento incluido en el activity_main.xml que no sea el propio contenedor de Fragments, lógicamente, se mostrará en todas las secciones de tu aplicación.

Con un poco de código igual queda más claro:

Sólo contenedor

Código:
<LinearLayout 
  android:id="contenedor"
  ... />
Contenedor y más elementos

Código:
<LinearLayout ... >

    <TextView ... />

    <LinearLayout 
      android:id="contenedor"
      ... />

</LinearLayout>
La primera opción sería la que te comentaba antes, mientras que en la segunda siempre tendrías un TextView más el contenido del Fragment que incluyas.

Espero haberme explicado bien
Te comento, el activity_main tiene lo siguiente:

Código:
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">



    <!-- Contenido de la actividad -->
    <include layout="@layout/content_layout" />

    <!-- Navigation Drawer Layout -->
    <include layout="@layout/navdrawer_layout" />


</android.support.v4.widget.DrawerLayout>
El navdrawer es donde está el navigator y en content_alyout donde debo añadir el código que me comentas. Este es el código original del content:

Código:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:clickable="true"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <!-- Toolbar -->
    <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/appbar"
        android:layout_height="?attr/actionBarSize"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <!-- Resto de la interfaz de usuario -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >



    </FrameLayout>

</LinearLayout>
Lo que entiendo es que quieres que cree un layout superior, un layout superior para que no entre en el contenido. Sería así no:

Código:
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Ejemplo de Texto que SOLO se debería ver al arrancar la app-->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Ejemplo"
        android:id="@+id/textView12"
        android:layout_gravity="center_horizontal|top" />


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:clickable="true"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">




    <!-- Toolbar -->
    <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/appbar"
        android:layout_height="?attr/actionBarSize"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <!-- Resto de la interfaz de usuario -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >



    </FrameLayout>

</LinearLayout>

</RelativeLayout>
Y me compila y tal, pero no se muestra.

Un saludo
Responder Con Cita
  #7  
Viejo 30/12/15, 17:35:56
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Es normal que no se vea, tienes un RelativeLayout con match_parent en ambos campos y después un LinearLayout también con match_parent en ambos campos. El LinearLayout tapa al RelativeLayout.

Lo más optimo es lo que te he dicho yo de sustituir un Fragment inicial que sólo quieres que se vea al principio. Porque cuando lo sustituyas ya será un contenido que desaparecerá, y no que estará pero no siendo visible, y por tanto su memoria reservada.
Responder Con Cita
  #8  
Viejo 30/12/15, 18:59:20
Array

[xs_avatar]
beta tester beta tester no está en línea
Miembro del foro
 
Fecha de registro: mar 2015
Mensajes: 166
Modelo de smartphone: OnePlus 5

Bueno, el código no sería exactamente como te dije, simplemente era un ejemplo. En concreto, tu tienes un Layout compuesto por el NavDrawer y un contenido (el de la Activity/Fragment). Este contenido a su vez se compone de otro Layout formado por una Toolbar (que quieres que se muestre en todas las vistas) y un FrameLayout. El FrameLayout es donde deberías mostrar el contenido de los diferentes Fragments de cada una de tus secciones.

Si aún haciéndolo de esta forma sigue si funcionar correctamente... echaría un vistazo a los layout_width y layout_height como bien dice @kriogeN

Última edición por beta tester Día 30/12/15 a las 19:07:00.
Responder Con Cita
  #9  
Viejo 31/12/15, 00:34:43
Array

[xs_avatar]
4ris 4ris no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: jun 2011
Mensajes: 80
Modelo de smartphone: Motorola defy
Tu operador: Movistar
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Es normal que no se vea, tienes un RelativeLayout con match_parent en ambos campos y después un LinearLayout también con match_parent en ambos campos. El LinearLayout tapa al RelativeLayout.

Lo más optimo es lo que te he dicho yo de sustituir un Fragment inicial que sólo quieres que se vea al principio. Porque cuando lo sustituyas ya será un contenido que desaparecerá, y no que estará pero no siendo visible, y por tanto su memoria reservada.
 Cita: Originalmente Escrito por beta tester Ver Mensaje
Bueno, el código no sería exactamente como te dije, simplemente era un ejemplo. En concreto, tu tienes un Layout compuesto por el NavDrawer y un contenido (el de la Activity/Fragment). Este contenido a su vez se compone de otro Layout formado por una Toolbar (que quieres que se muestre en todas las vistas) y un FrameLayout. El FrameLayout es donde deberías mostrar el contenido de los diferentes Fragments de cada una de tus secciones.

Si aún haciéndolo de esta forma sigue si funcionar correctamente... echaría un vistazo a los layout_width y layout_height como bien dice @kriogeN
Mañana trabajo todo el día así que lo comprobaré el día 1! Muchas gracias y feliz año ^^

En breve novedades!
Responder Con Cita
  #10  
Viejo 31/12/15, 00:44:17
Array

[xs_avatar]
beta tester beta tester no está en línea
Miembro del foro
 
Fecha de registro: mar 2015
Mensajes: 166
Modelo de smartphone: OnePlus 5

 Cita: Originalmente Escrito por 4ris Ver Mensaje
Mañana trabajo todo el día así que lo comprobaré el día 1! Muchas gracias y feliz año ^^

En breve novedades!
Igualmente!
Responder Con Cita
  #11  
Viejo 01/01/16, 23:00:50
Array

[xs_avatar]
4ris 4ris no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: jun 2011
Mensajes: 80
Modelo de smartphone: Motorola defy
Tu operador: Movistar
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Es normal que no se vea, tienes un RelativeLayout con match_parent en ambos campos y después un LinearLayout también con match_parent en ambos campos. El LinearLayout tapa al RelativeLayout.

Lo más optimo es lo que te he dicho yo de sustituir un Fragment inicial que sólo quieres que se vea al principio. Porque cuando lo sustituyas ya será un contenido que desaparecerá, y no que estará pero no siendo visible, y por tanto su memoria reservada.
Visto que el tema de los layoutq ue se tapan no lo consigo arreglarlo, como sería para llamar a un fragmente desde el inicio? Pensaba que sería en en onCreate del MainActivity sustituir
Código:
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
Y ahí cambiar el layout a el del fragment, pero me tira error, así que imagino que no es así no?
Responder Con Cita
  #12  
Viejo 02/01/16, 02:03:09
Array

[xs_avatar]
beta tester beta tester no está en línea
Miembro del foro
 
Fecha de registro: mar 2015
Mensajes: 166
Modelo de smartphone: OnePlus 5

 Cita: Originalmente Escrito por 4ris Ver Mensaje
Visto que el tema de los layoutq ue se tapan no lo consigo arreglarlo, como sería para llamar a un fragmente desde el inicio? Pensaba que sería en en onCreate del MainActivity sustituir
Código:
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
Y ahí cambiar el layout a el del fragment, pero me tira error, así que imagino que no es así no?
Tienes que hacer lo que te comentaba el otro día: tener una Activity que simplemente se utiliza como contenedor de los Fragments.

Para ello, tendrás que tener el Layout de la Activity al que le insertarás el Fragment. Un Fragment siempre debe estar asociado a una Activity.

Ahí va un pequeño ejemplo http://stackoverflow.com/a/14949829
Responder Con Cita
  #13  
Viejo 02/01/16, 19:13:43
Array

[xs_avatar]
4ris 4ris no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: jun 2011
Mensajes: 80
Modelo de smartphone: Motorola defy
Tu operador: Movistar
 Cita: Originalmente Escrito por beta tester Ver Mensaje
Tienes que hacer lo que te comentaba el otro día: tener una Activity que simplemente se utiliza como contenedor de los Fragments.

Para ello, tendrás que tener el Layout de la Activity al que le insertarás el Fragment. Un Fragment siempre debe estar asociado a una Activity.

Ahí va un pequeño ejemplo http://stackoverflow.com/a/14949829
Sigo peleandome sin sacar nada, desde que tenga novedades os aviso
Responder Con Cita
  #14  
Viejo 04/01/16, 13:42:57
Array

[xs_avatar]
4ris 4ris no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: jun 2011
Mensajes: 80
Modelo de smartphone: Motorola defy
Tu operador: Movistar
 Cita: Originalmente Escrito por beta tester Ver Mensaje
Tienes que hacer lo que te comentaba el otro día: tener una Activity que simplemente se utiliza como contenedor de los Fragments.

Para ello, tendrás que tener el Layout de la Activity al que le insertarás el Fragment. Un Fragment siempre debe estar asociado a una Activity.

Ahí va un pequeño ejemplo http://stackoverflow.com/a/14949829
Tengo todos los fragment asociados a activities, pero no consigo inicializar la app en uno de esos fragment. He probado lo que me has dicho, pero no lo consigo, podrías echarme un cable? Adjunto main

Código:
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private ScrimInsetsFrameLayout sifl;
    private DrawerLayout drawerLayout;
    private ActionBarDrawerToggle drawerToggle;
    private ListView ndList;
    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    private GoogleApiClient client;

    @override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sifl = (ScrimInsetsFrameLayout) findViewById(R.id.scrimInsetsFrameLayout);

        //Toolbar

        toolbar = (Toolbar) findViewById(R.id.appbar);
        setSupportActionBar(toolbar);

        //Menu del Navigation Drawer

        ndList = (ListView) findViewById(R.id.navdrawerlist);

        final String[] opciones = new String[]{"Lunes", "Martes", "Miercoles", "Jueves", "Vienes", "Sábado", "Domingo"};

        ArrayAdapter<String> ndMenuAdapter =
                new ArrayAdapter<>(this,
                        android.R.layout.simple_list_item_activated_1, opciones);

        ndList.setAdapter(ndMenuAdapter);

        ndList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @override
            public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
                Fragment fragment = null;

                switch (pos) {
                    case 0:
                        fragment = new Fragment1();
                        break;
                    case 1:
                        fragment = new Fragment2();
                        break;
                    case 2:
                        fragment = new Fragment3();
                        break;
                    


                }

                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.content_frame, fragment)
                        .commit();

                ndList.setItemChecked(pos, true);

                getSupportActionBar().setTitle(opciones[pos]);

                drawerLayout.closeDrawer(sifl);
            }
        });

        //Drawer Layout

        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));

        drawerToggle = new ActionBarDrawerToggle(
                this, drawerLayout, R.string.openDrawer, R.string.closeDrawer) {

            @override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }

            @override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
            }
        };

        drawerLayout.setDrawerListener(drawerToggle);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }


    @override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (drawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return false;
    }

    @override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        drawerToggle.syncState();
    }

    @override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        drawerToggle.onConfigurationChanged(newConfig);
    }

    @override
    public void onStart() {
        super.onStart();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client.connect();
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Main Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("android-app://com.arisguimera.calisthenicsroutine/http/host/path")
        );
        AppIndex.AppIndexApi.start(client, viewAction);
    }

    @override
    public void onStop() {
        super.onStop();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Main Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("android-app://com.arisguimera.calisthenicsroutine/http/host/path")
        );
        AppIndex.AppIndexApi.end(client, viewAction);
        client.disconnect();
    }
}
Se que en el switch solo tengo hasta el 3, no los he puesto todos para ir probando cosillas y tal
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 20:55:21 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /