0

I created an interface so I can communicate between a dialogue and a fragment.

Goal: When the user selects anything from the dialogue it should display it on a text view.

In this interface, I created an interface method, called in the main activity and passed the value the user selected in the dialogue. Along with the user selected value, in my fragment, I created a method that will set the text view to that value. However, whenever I call that method it always returns null.

I did plenty of testing with logs and found that the values being passed through my method is NOT null, everything seems to work the exact way I want it to which is odd. What confuses me even more, is that this method isn't even running, it immediately returns null before executing the code inside which is really strange to me.

Dialog Code:

    public String users_time;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        final String time_options[] = {"10", "20", "30", "40", "50", "60", "70", "80", "90"}; // Since we know how many options there are in the array we use an array instead of an arraylist

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        builder.setTitle("Choose the time");
        builder.setSingleChoiceItems(time_options, -1, new DialogInterface.OnClickListener() { // check items = what index is auto selected in the dialog, use -1 bc you dont want that
            @Override
            public void onClick(DialogInterface dialog, int which) { // which = Index in the array
                CharSequence time = time_options[which];
                Log.i("this" ,"LOG 1 dialogsTime retusn" + time);
                listener.onDialogInput(time);

                users_time = time_options[which];

                int usersTime = Integer.valueOf(users_time);
                listener.grabTime(usersTime);

            }
        });
        builder.setPositiveButton("Set Time", new DialogInterface.OnClickListener() { // positive = Ok or continue
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { // Negative = Cancel or stop
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });


        return builder.create(); // always return this at the end
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof  DiaglogListener) {
            listener = (DiaglogListener) context;
        }
        else {
            throw new RuntimeException(context.toString()
                    + " must implement DiaglogListener");
        }
    }
    @Override
    public void onDetach() {
        super.onDetach();
        listener = null;
    }
}

Main Activity Interface Method:

@Override
public void onDialogInput(CharSequence dialogsTime) {
    Fragment1_timer frag1 = new Fragment1_timer();

    Log.i("this" ,"LOG 2 runs successfully");

    try {
        frag1.setDialogTime(dialogsTime);
    } catch (Exception e){
        Toast.makeText(this, "Null error :/", Toast.LENGTH_SHORT).show();
    }
}

Fragment Method:

public void setDialogTime(CharSequence time){ 
    Log.i("this" ,"LOG 3 ran successfully");
    text_view_time.setText(time + ":00");
}
Tanveer Munir
  • 1,956
  • 1
  • 12
  • 27
That1guy
  • 5
  • 1
  • 6

1 Answers1

0

You can't use onAttach method for Fragment to DialogFragment communication. you will have to use "setTargetFragment" & "getTargetFragment" for that.

you can refer this answer. https://stackoverflow.com/a/32323822/9792247

Prayag Gediya
  • 1,078
  • 2
  • 11
  • 20