我想知道有没有办法在片段中创建一个datePicker?我正在创建一个常规活动可能,它给我语法错误.这样做的正确方法是什么?
NPi*_*ike 22
扩展Codejoy的答案:
这是我的DatePickerDialogFragment类:
public class DatePickerDialogFragment extends DialogFragment {
private Fragment mFragment;
public DatePickerDialogFragment(Fragment callback) {
mFragment = callback;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(getActivity(), (OnDateSetListener) mFragment, 1980, 7, 16);
}
}
Run Code Online (Sandbox Code Playgroud)
(请注意,构造函数接受使用此对话框的片段 - 我们将此引用用于DatePickerDialog的回调侦听器字段)
我的片段然后只实现onDateSetListener:
public class SignupFragment extends Fragment implements OnDateSetListener {
...
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// do stuff with the date the user selected
}
}
Run Code Online (Sandbox Code Playgroud)
...然后我从我的片段中显示对话框,如下所示:
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = new DatePickerDialogFragment(this);
newFragment.show(ft, "dialog");
Run Code Online (Sandbox Code Playgroud)
不确定这是否是最好的方法,但似乎工作正常.
Bar*_*urg 17
虽然以上答案可能有效,但我相信我有一个更简单的解决方案:
DatePickerDialog dialog = new DatePickerDialog(getActivity(), datePickerListener,
2000, 1,1);
dialog.show();
Run Code Online (Sandbox Code Playgroud)
其中datePickerListerener是这样的:
private DatePickerDialog.OnDateSetListener datePickerListener
= new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
//Do whatever you want
}
};
Run Code Online (Sandbox Code Playgroud)
小智 5
以前的anwsers正在解释得足够好,但这里是我如何更改DialogFragment的onDateSet方法的视图.
您可以将要更改的视图传递给扩展DialogFragment的类的构造函数.然后调用类的setText方法onDateSet方法.这是代码:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
public EditText activity_edittext;
public DatePickerFragment(EditText edit_text) {
activity_edittext = edit_text;
}
@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);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
activity_edittext.setText(String.valueOf(month + 1 ) + "/" + String.valueOf(day) + "/" + String.valueOf(year));
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样显示你的片段:
public void showDatePickerDialog(View v) {
new DatePickerFragment((EditText) v).show(getSupportFragmentManager(), "datePicker");
}
Run Code Online (Sandbox Code Playgroud)
将此方法设置为要更改的EditText的onClick方法.像这样:
<EditText
android:id="@+id/editTextToShowDate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ems="10"
android:focusable="false"
android:inputType="date"
android:onClick="showDatePickerDialog" >
</EditText>
Run Code Online (Sandbox Code Playgroud)
您很可能需要使用 DialogFragment。我在这里找到了一些信息:
这里也有很大的帮助:
这应该可以帮助你上路,我现在正在做这件事。尽管在示例代码中我不使用构建器,而是仅返回:
return new DatePickerDialog(getActivity(), mDateSetListener, mYear, mMonth, mDay);
Run Code Online (Sandbox Code Playgroud)
这似乎有效......尽管我还不知道如何更新调用此 DialogFragment 的片段上的文本。我以为这会起作用,但事实并非如此:
public void updateDisplay()
{
//update our button text from the calling fragment, this isn't quite working
//doesn't crash just doesn't update...must be missing something.
View v=getActivity()
.getLayoutInflater()
.inflate(R.layout.session_edits, null);
Button sessionDate = (Button)v.findViewById(R.id.sessionPickDate);
sessionDate.setText(new StringBuilder()
.append(mMonth+1).append("-").append(mDay).append("-").append(mYear).append(" "));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36850 次 |
最近记录: |