entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Comunicarcion entre fragments

Hola buen dia estoy tratando de realizar la comunicacion entre fragments y es algo con lo que me encuentro liado ya que es la primera vez que desarrollo para esta plataforma; el caso es que tengo un fragment donde cargo productos y de lado derecho tengo otro fragment donde quiero que se vaya creando un ticket con los productos seleccionados en el primer fragment. ¿Como harian eso? pongo parte de mi codigo para que se de una idea de lo que estoy haciendo.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:fitsSystemWindows="true"
    android:background="#FAFAFA"
    tools:context="com.salemobile.essis.magnus.MainActivity">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/relativeLayout">

        <EditText
            android:layout_width="90dp"
            android:layout_height="wrap_content"
            android:id="@+id/editText"
            android:hint="id"
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <EditText
            android:layout_width="90dp"
            android:layout_height="wrap_content"
            android:id="@+id/editText2"
            android:hint="Nombre"
            android:layout_alignTop="@+id/editText"
            android:layout_toRightOf="@+id/editText"
            android:layout_toEndOf="@+id/editText" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/contenedor"
        android:layout_width="1000dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_above="@+id/barraMenu"
        android:layout_below="@+id/relativeLayout">

    </RelativeLayout>
    <GridLayout
        android:id="@+id/barraMenu"
        android:layout_width="match_parent"
        android:layout_height="125dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="0dp"
        android:layout_marginRight="0dp"
        android:layout_marginBottom="0dp"
        android:layout_marginTop="0dp"
        android:background="#BDBDBD"
        android:columnCount="5"
        android:rowCount="1"
        android:paddingTop="4dp">
        <ImageButton
            android:id="@+id/ventas"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:background="#E0E0E0"
            android:src="@drawable/car"/>
        <ImageButton
            android:id="@+id/cuentas"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:background="#E0E0E0"
            android:src="@drawable/bill"/>
        <ImageButton
            android:id="@+id/almacen"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:background="#E0E0E0"
            android:src="@drawable/box"/>
        <ImageButton
            android:id="@+id/siguiente"
            android:layout_width="125dp"
            android:background="#E0E0E0"
            android:layout_height="match_parent"
            android:src="@drawable/next"/>
        <ImageButton
            android:id="@+id/balance"
            android:layout_width="125dp"
            android:background="#E0E0E0"
            android:layout_height="match_parent"
            android:src="@drawable/balance"/>
    </GridLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_toRightOf="@+id/contenedor"
        android:layout_toEndOf="@+id/contenedor"
        android:layout_above="@+id/barraMenu"
        android:id="@+id/lateral"
        android:layout_below="@+id/relativeLayout">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Ticket"
            android:id="@+id/lblTicket"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:textAlignment="center" />
    </RelativeLayout>

</RelativeLayout>

 private void CargarFragmento(Fragment GenericFrgmnt) {
        FragmentManager manager = getFragmentManager();
        FragmentTransaction ft = manager.beginTransaction();
        ft.replace(R.id.contenedor, GenericFrgmnt);
        ft.commit();
    }

Y en la clase del fragment:

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_clientes, container, false);
        mListView = (AbsListView) view.findViewById(android.R.id.list);
        ((AdapterView<ListAdapter>) mListView).setAdapter(mAdapter);
        mListView.setOnItemClickListener(this);
        lista = (ListView)view.findViewById(android.R.id.list);
        Clientes yo = new Clientes("Cristhian","infinito");
        clientes.add(yo);
        yo = new Clientes("Alberto","infinito");
        clientes.add(yo);
        yo = new Clientes("Teresita","infinito");
        clientes.add(yo);
        yo = new Clientes("Juan","infinito");
        clientes.add(yo);

        lista.setAdapter(new ClienteListAdapter(clientes));
        lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String mensajeDialogo = "¿Desea realizar operaciones con el usuario "+ clientes.get(position).getNombre().toString()+ " ?";
                new AlertDialog.Builder(getActivity())
                        .setTitle("Continuar Transaccion")
                        .setMessage(mensajeDialogo)
                        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                            }
                        })
                        .setIcon(android.R.drawable.ic_dialog_info)
                        .show();
            }
        });
        return view;
    }

1 Respuesta

1voto

wroque Puntos4630

Hola,

No escribiré código es algo tedioso, te recomiendo crear un Activity del tipo Parent Fragments

ActivityFragment
Fragment1
Fragment2

Ahora, como actualizar tus fragment centralizando un dato, bien manos a la obra. Existe algo llamado patrones de diseño, cualquiera que haya estudiado la carrera, lo sabría.

El patrón que necesitas implementar es el observer design pattern. En android ya existe la interfaz y la clase:

import java.util.Observable;
import java.util.Observer;

En tu parent Activity, declaramos el objeto Observador

private Observable mObservers;
// esta variable sera la que compartiran todos los fragment.
private Object data;

y al momento de instanciar el fragment, lo agregamos

Fragment fragment = MyFragment.newInstance(number, data);
mObservers.addObserver((Observer) fragment);

Agregamos el método que notificara a los fragments

    private void updateFragments(Object data) {
        mObservers.notifyObservers(data);
    }

claro tus fragment deben ser del tipo Observer (objetos observables)

public class MyFragment extends Fragment implements Observer {

    public static final String ARG_SECTION_NUMBER = "section_number";
    public static final String ARG_DATA= "data";

    public static MyFragment newInstance(int sectionNumber, Object data) {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();

        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        args.putParcelable(ARG_DATA, data);
        fragment.setArguments(args);

        return fragment;
    }

    private Object data;

    @Override
    public void update(Observable observable, Object data) {
         desde aquí realizas los cambios del fragment, en base al parametro data
    }

    //aqui dejarmos otro metodo que puede gatillarse de un evento como onclick etc..

    private void changeData(View view) {
       MyActivityFragment main = (MyActivityFragment) getActivity();
       main.updateFragments(data);
    }

}

Slds,
Atte.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta