how to create a custom dialog and receive results in android?

4.7k views Asked by At

i have an activity that when user click on button , a dialog open. in this dialog there is a spinner that have 3 choices: Blue,Red,Green. and there is a submit button. i want that when user select a color and click on submit, in caller activity, its String color set to selected color in dialog. i try this: but not worked. please help me....

String color;
String dialogColor;

showDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Dialog dialog = new Dialog(context);
            dialog.setContentView(R.layout.custom_dialog);
            dialog.setTitle("my dialog");

            Spinner spinner = (Spinner) dialog.findViewById(R.id.spinner);

            final TextView status = (TextView) dialog.findViewById(R.id.status);
            Button submit = (Button) dialog.findViewById(R.id.submit);


            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    dialogColor = parent.getItemAtPosition(position).toString();
                    status.setText("Color is: "+dialogColor);
                    color = dialogColor;
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {

                }
            });


        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("Color",dialogColor);

                dialog.dismiss();
            }
        });

            dialog.show();


        }
    });

i use both of direct and with intent ways to assign my color String to selected value. but not worked. where i have mistake?

1

There are 1 answers

1
Merlí Escarpenter Pérez On BEST ANSWER

I think the best way to create custom dialogs now is the Dialog Fragment, because the simple dialog it's limited. For example it's the way to create a dialogs with material design. And you have a differents ways to take info from dialog fragment, the first and the second for example.


This is basic code to create a dialog fragment:

//Method to call and start dialog fragment class
public void ShowPhotoFilesDialog(Activity context,File photo){
    //Declaration of classes
    Custom_DialogFragment custom_dialogFragment = new Custom_DialogFragment ();

    FragmentManager fragmentManager = context.getFragmentManager();

    // The device is using a large layout, so show the fragment as a dialog
    custom_dialogFragment.show(fragmentManager, "dialog");
}

And this is the basic dialog fragment class:

public class Custom_DialogFragment extends DialogFragment {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    try {
        // The only reason you might override this method when using onCreateView() is
        // to modify any dialog characteristics. For example, the dialog includes a
        // title by default, but your custom layout might not need it. So here you can
        // remove the dialog title, but you must call the superclass to get the Dialog.
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        //To hide action bar from layout
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        //Declaration of controls
        View v = getActivity().getLayoutInflater().inflate(R.layout.my_custom_layout);
        builder.setView(v);

        //My code

        return builder.create();
    }
    catch (Exception ex){
        Log.e("-- Custom_DialogFragment.onCreateDialog --","",ex);
        return null;
    }
}
}

Tell me if I helped you, good programming!