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