我对Android编程有点新意,所以请耐心等待......
我正在关注Google Android - Pickers中的教程,但在完成后,我不知道如何返回并在原始活动中显示所选日期。
如果这听起来很混乱,我目前有2个类 - ClassA.java 和 ClassB.java ,其中 ClassA 是我的主要活动, ClassB 是我的对话框片段。
我知道下面的这个功能(这是在 ClassB 中)接受视图,年,月和文字并返回一些内容,但我不知道如何将其存储在 ClassA 的主函数中,并将其显示为 Spinner ( TextView )中当前选定的值。
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
return [something];
}
我在 ClassA 中的功能在用户点击 Spinner ( TextView 上的 onClick )后使用下面的代码>):
public void DatePicker(View v) {
DialogFragment DateFragment = new NotifyDatePicker();
DateFragment.show(getSupportFragmentManager(), "DatePicker");
}
所以问题是,我从哪里开始存储数据?我是否从 ClassB 获取返回 ClassA (甚至还有返回值?)并将其存储到 Bundle 中(同时也更新R.id.TextViewSpinner),或者在用户位于 DialogFragment <内时保存它/ em>( ClassB )?
修改
我刚刚意识到自己的错误。 ClassB 本身就是一个单独的活动,因此更改 Spinner ( TextView )和存储Bundle应该在中完成ClassB的 ...
但是有一个小问题。
我正在使用(TextView)findViewById(R.id.TextViewSpinner).setText(daymonthyear),但错误不断出现:
The method findViewById(int) is undefined for the type ClassB
有什么我忘了导入/包含吗?
完整代码
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;
}
}
这是通过Google Tutorial。我一直在调整,但它总是让我回到原点...
答案 0 :(得分:1)
也许不是最佳解决方案,但您可以使用DefaultSharedPreferences
来保存值:
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;
}
并在活动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);
我希望这会有所帮助。
推荐使用TextViewSpinner
之类的引用以非大写字母开头:textViewSpinner
。
答案 1 :(得分:1)
实际上没有必要通过共享偏好来绕道而行。您所要做的就是告诉您ClassB
在哪里寻找视图:
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;
}
有关扩展DialogFragment
的类的完整代码(在您的情况下为ClassB
),请参阅this answer of mine类似的问题。