【问题标题】:Force close, adding date picker in fragment强制关闭,在片段中添加日期选择器
【发布时间】:2018-03-29 07:12:12
【问题描述】:

我想在片段中添加日期时间选择器,我已经尝试过了,但是当单击文本以显示日期选择器时,应用程序被强制关闭。 这是我的代码

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*/
}

【问题讨论】:

标签: android datepicker fragment


【解决方案1】:

删除getActivity() 并使用view

替换这个

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

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

【讨论】:

  • 还是强制关闭
【解决方案2】:

我建议你在onViewCreated(...)方法中找到所有View's。当最终创建视图并且所有创建方法都完成时。
在那里你可以这样做:

@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);
    // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多