JavascriptProva

mercoledì 7 dicembre 2016

Messaggio dal fragment alla main activity

Esercizio: messaggio del fragment verso l'Activity:

metto un Button nel Frammento 1:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#AADDFF">

    <Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/button" />
</RelativeLayout> 
Nel codice Java del Frammento devo creare un'interfaccia:
    public interface OnFragmentEventListener{
        public void evento();
    }
Creo una variabile del tipo di questa interfaccia:
public class Frammento extends Fragment {

    OnFragmentEventListener mCallback;

......
Nell'evento onAttach identifico l'Activity cui il fragment viene "attaccato" come un'istanza dell'interfaccia:
    @Override
    public void onAttach(Context context){
        super.onAttach(context);
        if(context instanceof AppCompatActivity){
            mCallback=(OnFragmentEventListener)context;
        }
    }
E nell'evento onCreateView attribuisco al button il listener e dico di far eseguire nella variabile interfaccia il metodo che questa implementa:
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View v=inflater.inflate(R.layout.frammento,container,false);
        button=(Button)v.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                mCallback.evento();
            }
        });
        return v;
    }
E funziona: quando io clicco il button presente sul Frammento 1 viene eseguito il metodo come implementato dall'Activity Main:
(codice della Main Activity:)
public class MainActivity extends AppCompatActivity implements Frammento.OnFragmentEventListener{

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

    public void evento(){
        System.out.println("EVENTO RICEVUTO");
    }


}

Nessun commento:

Posta un commento