Retrieve and set data from DialogFragment (DatePicker)

前端 未结 4 662
闹比i
闹比i 2020-12-18 12:44

My DialogFragment class is invoked when I press a button on a activity. I want the date set through this DialogFragment to be displayed on the buttons text. FindViewById re

相关标签:
4条回答
  • 2020-12-18 13:18

    A Fragment is not a View. If you want to find a fragment, use findFragmentById from the FragmentManager.

    0 讨论(0)
  • 2020-12-18 13:25

    here's a good pattern to follow:

    1. create a listener interface in your dialog to handle the relevant button presses in the dialog
    2. implement it in the starting activity
    3. when the user presses "okay" or "cancel", call the listener methods
    4. do whatever you need to do in the impl of the listener to update the activity's view

    something like,

    class MyDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
      static interface Listener {
        void onOkay(MyObject result);
        void onCancel();
      }
      ...
    
      @Override
      public Dialog onCreateDialog(Bundle savedInstanceState) {
        ...
    
        // set this as a listener for ok / cancel buttons
        return new AlertDialog.Builder(activity)...whatever...
            .setPositiveButton(R.string.ok, this)
            .setNegativeButton(R.string.cancel, this).create();
      }
    
      @Override
      public void onClick(DialogInterface dialog, int which) {
          if (which == DialogInterface.BUTTON_POSITIVE) {
              if (getActivity() instanceof Listener) {
                  ((Listener)getActivity()).onOkay(...);
              }
          } else {
              if (getActivity() instanceof Listener) {
                  ((Listener)getActivity()).onCancel();
              }
          }
      }
    }
    
    class MyActivity extends Activity implements MyDialogFragment.Listener {
      ...
      @Override
      public void onOkay(MyObject result) {
        // update activity view here with result
      }
    
      @Override
      public void onCancel() {
        // anything?
      }
    }
    

    if your case, the "result" passed into the onOkay() method would be the Date object picked by the user in the dialog.

    0 讨论(0)
  • 2020-12-18 13:29

    In the method in your DialogFragment that is in charge of being notified when the user sets the date, do this

    Button activityButton = (Button)getActivity().findViewById(R.id.myButton);
    activityButton.setText (myDate);
    
    0 讨论(0)
  • 2020-12-18 13:43

    Create Class for DatePicker Fragment:

        public class SelectDateFragment extends DialogFragment implements
                                         DatePickerDialog.OnDateSetListener {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
    
                Calendar now = Calendar.getInstance();
                year = now.get(Calendar.YEAR);
                month = now.get(Calendar.MONTH);
                day = now.get(Calendar.DATE);
    
             return new DatePickerDialog(getActivity(), this, year, month, day);
        }
    
        public void onDateSet(DatePicker view, int year, int month, int day) {
            orderDateEditText.setText(year + "-" + (month + 1) + "-" + day);
        }
    }
    

    Call this Fragment When clicked On ImageButton:

        /** Create DatePicker dialog on click of OrderDateEditText **/
       orderDatePickerButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                DialogFragment newFragment = new SelectDateFragment();
                newFragment.show(getFragmentManager(), "DatePicker");
            }
        });
    

    In Month there is plus 1 because DatePicker default takes month from 0 to 11 for Jan to Dec.

    Thank you..

    0 讨论(0)
提交回复
热议问题