JavascriptProva

Visualizzazione post con etichetta fragment. Mostra tutti i post
Visualizzazione post con etichetta fragment. Mostra tutti i post

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");
    }


}

Creazione di due fragments mediante xml.

Esercizio di creazione di due fragments messi in un'Activity per mezzo del codice xml.

Creo i fragments: una classe Java e un file XML.

Frammento.java:
public class Frammento extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View v=inflater.inflate(R.layout.frammento,container,false);
        return v;
    }
}


frammento.xml:
<?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> 



Frammento2.java:
public class Frammento2 extends Fragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View v=inflater.inflate(R.layout.frammento2,container, false);
        return v;
    }
}


frammento2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFAA">

    <TextView
        android:text="Questo è il frammento 2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView" />
</LinearLayout> 



MainActivity.java:
public class MainActivity extends AppCompatActivity{

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


}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <fragment android:name="com.antonello.laboratorionuovo2.Frammento"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:id="@+id/frammento"
        android:layout_weight="1"/>

    <fragment android:name="com.antonello.laboratorionuovo2.Frammento2"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:id="@+id/frammento2"
        android:layout_weight="1"/>

</LinearLayout> 


E così funziona perfettamente.