Reputation: 2368
I'm a bit new to Android Programming, so bear with me here...
I'm following the tutorial from Google Android - Pickers, but after following through, I have no idea how to return and display the selected date on the original activity.
If that sounds very confusing now, I currently have 2 classes - ClassA.java and ClassB.java, where ClassA is my main activity, and ClassB is my dialog fragment.
I understand that this function below (this is in ClassB) takes in the view, year, month and text and returns something, but I have no idea how to store it back in the main function in ClassA and display it as the currently selected value in the Spinner (TextView).
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
return [something];
}
My function in ClassA uses the code below once the user taps (onClick) on the Spinner (TextView) :
public void DatePicker(View v) {
DialogFragment DateFragment = new NotifyDatePicker();
DateFragment.show(getSupportFragmentManager(), "DatePicker");
}
So the question is, where do I start storing the data? Do I grab the return from ClassB to ClassA (is there even a returned value?) and store it into a Bundle (while also at the same time updating the R.id.TextViewSpinner), or do I save it while the user is inside the DialogFragment (ClassB)?
EDIT
I just realized my mistake. ClassB is a separate activity on its own, so changing of the Spinner (TextView) and storing of the Bundle should be done in ClassB...
There's one small problem though.
I'm using (TextView)findViewById(R.id.TextViewSpinner).setText(daymonthyear) but an error keeps coming up :
The method findViewById(int) is undefined for the type ClassB
Is there something I've forgotten to import/include?
FULL CODES
public class ClassB extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
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);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Change TextViewSpinner here (setText)
// Tried (TextView)findViewById(R.id.TextViewSpinner).setText(daymonthyear) - The method findViewById(int) is undefined for the type ClassB error returned
// Tried (TextView)context.findViewById(R.id.TextViewSpinner) - context cannot be resolved error returned
return;
}
}
This is via the Google Tutorial. I've been tweaking here and there but it always throws me back to square one...
Upvotes: 1
Views: 2463
Reputation: 638
There is actually no need to take the detour via the shared preferences. All you have to do is tell your ClassB
where to look for the view:
public void onDateSet(DatePicker view, int year, int month, int day) {
// Change TextViewSpinner here (setText)
// Tried (TextView)findViewById(R.id.TextViewSpinner).setText(daymonthyear)
// - The method findViewById(int) is undefined for the type ClassB error returned
// Instead try:
(TextView) getActivity().findViewById(R.id.TextViewSpinner)
.setText(day + "/" + month + "/" + year)
// Tried (TextView)context.findViewById(R.id.TextViewSpinner)
// - context cannot be resolved error returned
return;
}
For the full code of the class extending DialogFragment
(in your case ClassB
) see this answer of mine to a similar question.
Upvotes: 1
Reputation: 1204
Maybe not the best solution, but you can use the DefaultSharedPreferences
to save the values:
public void onDateSet(DatePicker view, int year, int month, int day) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.putInt("year", year);
preferences.putInt("month", month);
preferences.putInt("day", day;
preferences.commit();
return;
}
and do something with them in Activity A:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
int year = preferences.getInt("year", 0);
int month = preferences.getInt("month", 0);
int day = preferences.getInt("day", 0);
(TextView)findViewById(R.id.TextViewSpinner).setText(day + "/" + month + "/" + year);
I hope this helps.
It is by the way recommended to have references like TextViewSpinner
start with a non-capital letter: textViewSpinner
.
Upvotes: 1