findViewById不适用于日期选择器的片段

时间:2016-12-18 12:11:42

标签: android datepicker

我正在尝试在片段中使用日期选择器,但在findViewId中显示错误。我使用了微调器的视图,但我无法将它用于设置日期功能。任何人都可以帮助我,因为我需要设置日期和用户的日期。我是安道尔工作室的新手。我对Java有所了解,但对于Android来说我是全新的。

public class Statement extends Fragment implements DatePickerDialog.OnDateSetListener{



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    //return inflater.inflate(R.layout.fragment_statement, container, false);
    View v = inflater.inflate(R.layout.fragment_statement, container, false);
    String [] values =
            {"Time at Residence","Under 6 months","6-12 months","1-2 years","2-4 years","4-8 years","8-15 years","Over 15 years",};
    Spinner spinner = (Spinner) v.findViewById(R.id.spinner);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, values);
    adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    spinner.setAdapter(adapter);
    return v;
}
public void datePicker(View view){
    DatePickerFragment fragment = new DatePickerFragment();
    fragment.show(getActivity().getFragmentManager(),"date");
}

public void setDate(final Calendar calendar){
    final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
    ((TextView) findViewById(R.id.showDate).setText(dateFormat.format(calendar.getTime())));
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    Calendar cal = new GregorianCalendar(year,monthOfYear,dayOfMonth);
    setDate(cal);
}

public static class DatePickerFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog (Bundle savedInstanceState){
        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(),(DatePickerDialog.OnDateSetListener)getActivity(),year,month,day);

    }


}

}

这是我得到的错误

12-19 10:17:16.906 1311-1311/com.test.datepicker E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                     Process: com.test.datepicker, PID: 1311
                                                                                  java.lang.ClassCastException: com.test.datepicker.NavigationActivity cannot be cast to android.app.DatePickerDialog$OnDateSetListener
                                                                                      at com.test.datepicker.Statement$DatePickerFragment.onCreateDialog(Statement.java:80)
                                                                                      at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
                                                                                      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:904)
                                                                                      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082)
                                                                                      at android.app.BackStackRecord.run(BackStackRecord.java:833)
                                                                                      at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
                                                                                      at android.app.FragmentManagerImpl$1.run(FragmentManager.java:452)
                                                                                      at android.os.Handler.handleCallback(Handler.java:739)
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                      at android.os.Looper.loop(Looper.java:145)
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5942)
                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                      at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

2 个答案:

答案 0 :(得分:0)

您必须初始化TextView中的onCreateView并将该变量用于setText。请参阅下面的代码,

TextView output;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_statement, container, false);
    ...

    Spinner spinner = (Spinner) v.findViewById(R.id.spinner);
    output = (TextView) v.findViewById(R.id.showDate);

    ...
    return v;
}

public void setDate(final Calendar calendar){
    final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
    output.setText(dateFormat.format(calendar.getTime()));
}

答案 1 :(得分:0)

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                 Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View root = inflater.inflate(R.layout.fragment_flight, container, false);
    depDate = (TextView) root.findViewById(R.id.book_f_dep);
    depDate.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    DialogFragment newFragment = new SelectDateFragment();
    newFragment.show(getFragmentManager(), "DatePicker");
 }
    });
    return root;
 }