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