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
A Fragment
is not a View
. If you want to find a fragment, use findFragmentById
from the FragmentManager
.
here's a good pattern to follow:
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.
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);
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..