Search code examples
androidandroid-fragmentsandroid-dialogfragment

Android full-screen dialog callback issue


I am having trouble wrapping my head around something but let me first describe my setup:

flow

I have an activity that references 3 fragments, each one of them get shown at the correct time. This is how the ChildrenSpecificationFragment looks:

If the user clicks the floating action button the following DialogFragment opens:

I found the following information in the new material design guidelines: https://www.google.com/design/spec/components/dialogs.html#dialogs-full-screen-dialogs

Avoid dialogs that: Open additional dialogs from within a dialog. Contain scrolling content, particularly alerts. Instead, consider alternate containers or layouts that are optimized for reading or interacting with significant amounts of content.

Exceptions include:Full-screen dialogs may open additional dialogs, such as pickers, because their design accommodates additional layers of material without significantly increasing the app’s perceived z-depth or visual noise.

This is where my problems begin. The 'add child' dialog has scrollable content (in landscape mode) and when the user clicks 'Birth date' a date picker opens.

I am trying to find a way to implement a full screen dialog (as in the guidelines) that has a callback to the ChildrenSpecificationFragment, so that I can add the child to the RecyclerView .

I hope that my questing is clear and would greatly appreciate any input that would lead me to the solution. Thanks in Advance!


Solution

  • I don't see code from your post. So I am guessing your code structure as a start. First build your dialog with a listener and process setPositiveButton() and the onClick event.

    Code suggestion:

    public class ChildrenSpecificationFragment extends Fragment {
    ...
    
    public void passData(Object obj) {
    }
    
       class SubChildFragment extends Fragment {
           AlertDialog.Builder builder = new AlertDialog.Builder(thisContext);
           ...
           // Add the buttons...
           builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
               ...
               passData(Object obj);   // pass data to the outer fragment class
    

    Notes:

    • SubChildFragment, for example, is an inner class derived from Fragment. It can call the public method passData() in the outer class ChildrenSpecificationFragment for passing any data you need.
    • I am using an inner class because I think this is what you meant in your diagram by

    Add child full-screen fragment

    • This coding technique is easier than starting a new Activity and Intent.

    For showing fullscreen dialogs, there is a good Google webpage I think @ Dialog - Fullscreen. Search text for "Showing a Dialog Fullscreen or as an Embedded Fragment".