Вот полный пример фрагмента «Да / Нет»:
Класс:
public class SomeDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle("Title")
.setMessage("Sure you wanna do this!")
.setNegativeButton(android.R.string.no, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do nothing (will close dialog)
}
})
.setPositiveButton(android.R.string.yes, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do something
}
})
.create();
}
}
Для запуска диалога:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// Create and show the dialog.
SomeDialog newFragment = new SomeDialog ();
newFragment.show(ft, "dialog");
Вы также можете позволить классу реализовать onClickListener и использовать его вместо встроенных слушателей.
Обратный вызов к действию
Если вы хотите реализовать обратный вызов, вот как это делается
В вашей деятельности:
YourActivity extends Activity implements OnFragmentClickListener
и
@Override
public void onFragmentClick(int action, Object object) {
switch(action) {
case SOME_ACTION:
//Do your action here
break;
}
}
Класс обратного вызова:
public interface OnFragmentClickListener {
public void onFragmentClick(int action, Object object);
}
Затем для выполнения обратного вызова из фрагмента необходимо убедиться, что слушатель подключен следующим образом:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentClickListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement listeners!");
}
}
И обратный вызов выполняется так:
mListener.onFragmentClick(SOME_ACTION, null); // null or some important object as second parameter.