Aprendiendo Desarrollo Android - Fragments

Fragmentos


Un Fragment representa un comportamiento o una parte de la interfaz de usuario en una Activity. Puedes combinar múltiples fragmentos en una sola actividad para crear una IU multipanel y volver a usar un fragmento en múltiples actividades. Puedes pensar en un fragmento como una sección modular de una actividad que tiene su ciclo de vida propio, recibe sus propios eventos de entrada y que puedes agregar o quitar mientras la actividad se esté ejecutando (algo así como una "subactividad" que puedes volver a usar en diferentes actividades).
Un fragmento siempre debe estar integrado a una actividad y el ciclo de vida del fragmento se ve directamente afectado por el ciclo de vida de la actividad anfitriona. Por ejemplo, cuando la actividad está pausada, también lo están todos sus fragmentos, y cuando la actividad se destruye, lo mismo ocurre con todos los fragmentos. Sin embargo, mientras una actividad se está ejecutando (está en el estado del ciclo de vida reanudada ), puedes manipular cada fragmento de forma independiente; por ejemplo, para agregarlos o quitarlos. Cuando realizas una transacción de fragmentos como esta, también puedes agregarlos a una pila de actividades administrada por la actividad; cada entrada de la pila de actividades en la actividad es un registro de la transacción de fragmentos realizada. La pila de actividades le permite al usuario invertir una transacción de fragmentos (navegar hacia atrás) al presionar el botón Atrás.

Filosofía de diseño


Android introduce los fragmentos en Android 3.0 (nivel de API 11), principalmente para admitir diseños de IU más dinámicos y flexibles en pantallas grandes, como las de las tablets. Como la pantalla de una tablet es mucho más grande que la de un teléfono, hay más espacio para combinar e intercambiar componentes de la IU. Los fragmentos admiten esos diseños sin la necesidad de que administres cambios complejos en la jerarquía de vistas. Al dividir el diseño de una actividad en fragmentos, puedes modificar el aspecto de la actividad durante el tiempo de ejecución y conservar esos cambios en una pila de actividades administrada por la actividad. Por ejemplo, una aplicación de noticias puede usar un fragmento para mostrar una lista de artículos a la izquierda y otro fragmento para mostrar un artículo a la derecha; ambos fragmentos aparecen en una actividad, uno al lado del otro, y cada fragmento tiene su propio conjunto de métodos callback del ciclo de vida y administran sus propios eventos de entrada del usuario. Entonces, en lugar de usar una actividad para seleccionar un artículo y otra actividad para leer el artículo, el usuario puede seleccionar un artículo y leerlo dentro de la misma actividad, tal como se ilustra en el diseño de tablet en la figura.

Coordinación con el ciclo de vida de la actividad

El ciclo de vida de la actividad en la que reside el fragmento afecta directamente al ciclo de vida del fragmento, de modo que cada callback del ciclo de vida para la actividad genera un callback similar para cada fragmento. Por ejemplo, cuando la actividad recibe onPause(), cada fragmento en la actividad recibe onPause().



  • onAttach()
  • Reciba una llamada cuando se asocia el fragmento con la actividad (aquí se pasa Activity).
  • onCreateView()
  • Se lo llama para crear la jerarquía de vistas asociada con el fragmento.
  • onActivityCreated()
  • Se lo llama cuando el método onCreate() de la actividad realiza un callback.
  • onDestroyView()
  • Se lo llama cuando se quita la jerarquía de vistas asociada con el fragmento.
  • onDetach()
  • Se lo llama cuando se desasocia el fragmento de la actividad.

Código



main_activity.xml

<?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:id="@+id/activity_ab"    
android:layout_width="match_parent"    
android:layout_height="match_parent"    
android:paddingBottom="@dimen/activity_vertical_margin"    
android:paddingLeft="@dimen/activity_horizontal_margin"    
android:paddingRight="@dimen/activity_horizontal_margin"    
android:paddingTop="@dimen/activity_vertical_margin"   
 android:orientation="horizontal"    
tools:context="com.iesous.appme.myapplication.ABActivity">

    <fragment        
android:id="@+id/fragmentA"        
android:layout_width="0dp"        
android:layout_height="match_parent"        
android:layout_weight="2"        
android:name="com.iesous.appme.myapplication.fragmentAB.FragmentA"        
tools:layout="@layout/fragment_a"/>

    <fragment        
android:id="@+id/fragmentB"        
android:layout_height="match_parent"        
android:layout_width="0dp"        
android:layout_weight="1"        
android:name="com.iesous.appme.myapplication.fragmentAB.BFragment"        
tools:layout="@layout/fragment_b"/>

</LinearLayout>

fragment_b.xml
<FrameLayout 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:background="#82B1FF"    
tools:context="com.iesous.appme.myapplication.fragmentAB.BFragment">

    <!-- TODO: Update blank fragment layout -->    
<TextView        
android:id="@+id/tv_reciver"        
android:layout_width="match_parent"        
android:layout_height="match_parent"        
android:text="@string/hello_blank_fragment" />

</FrameLayout>

fragment_a.xml

<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:background="#00ACC1"    
tools:context="com.iesous.appme.myapplication.fragmentAB.FragmentA">

    <!-- TODO: Update blank fragment layout -->    
<TextView        
android:layout_width="match_parent"        
android:layout_height="wrap_content"        
android:text="Soy fragmento A"        
android:textAlignment="center" />

    
<EditText        
android:id="@+id/et_data"        
android:layout_width="match_parent"        
android:layout_height="wrap_content" />

    
<Button        
android:id="@+id/btn_send"        
android:layout_width="match_parent"        
android:layout_height="wrap_content"        
android:text="Enviar dato"/>

</LinearLayout>

FragmentA.jsva
/** * A simple {@link Fragment} subclass. * 
Activities that contain this fragment must implement the * 
{@link FragmentA.OnFragmentInteractionListener} interface * to 
handle interaction events. * Use the {@link FragmentA#newInstance}
 factory method to * create an instance of this fragment. */
public class FragmentA extends Fragment {
::::::::::::::::

//Se lo llama para crear la jerarquía de vistas asociada con el fragmento.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
     rootView = inflater.inflate(R.layout.fragment_a, container, false);
    etData = (EditText) rootView.findViewById(R.id.et_data);
    btnSend = (Button) rootView.findViewById(R.id.btn_send);
    btnSend.setOnClickListener(new View.OnClickListener() {
        @Override        public void onClick(View view) {
            String data = etData.getText().toString();
            ED.onFragmentInteraction(data);
        }
    });
    return rootView;
}

//JF - Reciba una llamada cuando se asocia el 
//fragmento con la actividad (aquí se pasa Activity).
@Overridepublic void onAttach(Context context) {
    super.onAttach(context);
    //Nos comunicamos con la activity    ED = (OnFragmentInteractionListener) context;
}


/** * This interface must be implemented by activities that contain 
this * fragment to allow an interaction in this fragment to be 
communicated * to the activity and potentially other fragments contained 
in that * activity. * <p>
 * See the Android Training lesson <a href=
 * "http://developer.android.com/training/basics/fragments/communicating.html" * >
Communicating with Other Fragments</a> for more information. */
public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name    void onFragmentInteraction(String data);
}



::::::::::::::::


}


FragmentB.java
public class BFragment extends Fragment {
::::::::::

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment    rootView = inflater.inflate(R.layout.fragment_b, container, false);
    tvData = (TextView) rootView.findViewById(R.id.tv_reciver);
    return rootView;
}

public void recibirData(String data){
    tvData.setText(data);
}

::::::::::

}


MainActivity.java

public class ABActivity extends AppCompatActivity implements FragmentA.OnFragmentInteractionListener {

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

    @Override    public void onFragmentInteraction(String data) {
        BFragment bFragment = (BFragment) getFragmentManager().findFragmentById(R.id.fragmentB);
        bFragment.recibirData(data);
    }
}

Interfaz





Código


GitHub

Comentarios

Entradas populares de este blog

Introducción a la lógica matemática - Cap. 2 Reglas de Inferencia.

Introducción a la lógica matemática - Cap. 4 Tablas de certeza

Hubo un problema pero puedes intentarlo de nuevo Windows error OOBEEULA