Reputation: 1528
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 refuses to be recognized by the class.
I found a similar question but I'm unable to relate it to my case.
Code:
Button which calls the Dialogue fragment:
public void datepicker(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getFragmentManager(), "datePicker");
}
Code for dialogue fragment:
public class DatePickerFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceSateate) {
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen
}
}
}
Upvotes: 3
Views: 11993
Reputation: 62391
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..
Upvotes: 3
Reputation: 22637
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.
Upvotes: 1
Reputation: 36449
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);
Upvotes: 10
Reputation: 81349
A Fragment
is not a View
. If you want to find a fragment, use findFragmentById
from the FragmentManager
.
Upvotes: 0