0

I want to adding date time picker in a fragment, I already try it but when the text is clicked to show date picker, apps is force close. Here is my code

FragmentHome.java

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_fragment_home,container,false);

    /**spinner*/
    spinner=(Spinner)view.findViewById(R.id.spinBranch);
    ArrayAdapter<String> adapterSpinner= new ArrayAdapter<String>(this.getActivity(),android.R.layout.simple_spinner_item,branchView);
    adapterSpinner.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    spinner.setAdapter(adapterSpinner);

    /**View Pager*/
    viewPager=(ViewPager)view.findViewById(R.id.viewImage);
    adapter=new customSwitchAdapterHome(this.getActivity());
    viewPager.setAdapter(adapter);

    txtDate=(TextView)getActivity().findViewById(R.id.txtDateChooser);

    return view;
}

void onClickDate(View view){
    txtDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DialogFragment newFragment= new SelectDateFragment();
            newFragment.show(getFragmentManager(),"DatePicker");
        }
    });
}

SelectDateFragment.java

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final Calendar calendar = Calendar.getInstance();
    int yy = calendar.get(Calendar.YEAR);
    int mm = calendar.get(Calendar.MONTH);
    int dd = calendar.get(Calendar.DAY_OF_MONTH);
    return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}

public void onDateSet(DatePicker view, int yy, int mm, int dd) {
    populateSetDate(yy, mm+1, dd);
}
public void populateSetDate(int year, int month, int day) {
    /** set text*/
}
Kharisma
  • 107
  • 1
  • 1
  • 9

2 Answers2

1

Remove getActivity() and use view

Replace this

txtDate=(TextView)getActivity().findViewById(R.id.txtDateChooser);

To

txtDate=(TextView)view.findViewById(R.id.txtDateChooser);
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
Nikunj
  • 3,937
  • 19
  • 33
0

I suggest you find all View's in onViewCreated(...) method. When the View is finally created and all creation methods are finished.
There you can do it like this:

@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
    /**spinner*/
    spinner = (Spinner)view.findViewById(R.id.spinBranch);
    // ...

    /**View Pager*/
    viewPager = (ViewPager)view.findViewById(R.id.viewImage);
    // ...

    txtDate = (TextView)view.findViewById(R.id.txtDateChooser);
    // ...
}
Dumbo
  • 1,630
  • 18
  • 33