Xabaras
  • Home
  • Mobile
  • Videos
  • Download
  • Firefox PowerPC
  • Paolo Montalto
    About me

android, Programmazione
Paolo Montalto
Tuesday 29 August 2017

Creare un Dialog personalizzato con i DialogFragment

Fin da quando android è stato lanciato, creare un dialog con un layout personalizzato è sempre stato un po' macchinoso, anche perché la classe Dialog non era pensata per questo.

?

Fortunatamente con la API level 11 il team di Android ha rilasciato il DialogFragment che è poi stato aggiunto alla support library rendendolo disponibile per tutti i target.

Un DialogFragment è un fragment che mostra una finestra di dialogo sovrapposta a quella dell'activity cui appartiene. Poiché è un fragment, si integra nel lifecycle dell'activity ed assicura che ciò che succede nella finestra di dialogo rimanga consistente (mentre i dialog erano generalmente delle entità autonome).

Creare un Dialog personalizzato con il DialogFragment è piuttosto semplice, basta estendere la classe DialogFragment in questo modo:

public class MyCustomDialogFragment extends DialogFragment {
	@Override
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
	}
	
	@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_my_custom_dialog, container, false);
        
        // Do all the stuff to initialize your custom view
        
        return v;
    }	
}

Ora non resta che implementare il codice per mostrare il dialog all'interno della nostra activity o fragment.

Poiché il DialogFragment è un fragment basterà creare una fragment transaction e poi invocare il metodo show  di MyCustomDialogFragment:

FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
	ft.remove(prev);
}
ft.addToBackStack(null);

DialogFragment dialogFragment = new MyCustomDialogFragment();
dialogFragment.show(ft, "dialog");

Il metodo show si occuperà di aggiungere il DialogFragment alla transaction e di farne il commit.

Sebbene la prima riga e le ultime due siano sufficienti a mostrare il dialog, avrete notato che sono state aggiunte alcune altre righe di codice dopo la creazione della FragmentTransaction.

Questo codice serve ad assicurare che non ci sia un'altra istanza del dialog ancora visibile.

Per nascondere il dialog basterà fare così:

dialogFragment.dismiss();

Questa è solo un'infarinatura su come usare i DialogFragment, una documentazione più approfondita è disponibile sull'Android Developer Portal.

Questo post è disponibile anche su Medium (in inglese).

Social Hub
Share this post
Posts
Recently on Xabaras.it
Comments
What people recently said

Donate
If you like my posts and you want to help me keeping this pages up and running you can contribute with a totally secure donation via PayPal.