Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击EditText以片段形式打开日历_Android_Android Layout_Android Fragments_Android Calendar - Fatal编程技术网

Android 单击EditText以片段形式打开日历

Android 单击EditText以片段形式打开日历,android,android-layout,android-fragments,android-calendar,Android,Android Layout,Android Fragments,Android Calendar,我试图在点击片段内的编辑文本时打开日历。但当我点击编辑文本时,它向我抛出空指针异常。 同样的代码在Activity类中运行良好,但在Fargement中运行不正常 例外情况 03-05 19:02:39.888: E/AndroidRuntime(1092): FATAL EXCEPTION: main 03-05 19:02:39.888: E/AndroidRuntime(1092): java.lang.NullPointerException 03-05 19:02:39.888: E/

我试图在点击片段内的编辑文本时打开日历。但当我点击编辑文本时,它向我抛出空指针异常。 同样的代码在Activity类中运行良好,但在Fargement中运行不正常

例外情况

03-05 19:02:39.888: E/AndroidRuntime(1092): FATAL EXCEPTION: main
03-05 19:02:39.888: E/AndroidRuntime(1092): java.lang.NullPointerException
03-05 19:02:39.888: E/AndroidRuntime(1092):     at com.test.newapp.AppTrip.showDialog(AppTrip.java:75)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at com.test.newapp.AppTrip$2.onClick(AppTrip.java:54)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at android.view.View.performClick(View.java:4212)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at android.view.View$PerformClick.run(View.java:17476)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at android.os.Handler.handleCallback(Handler.java:800)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at android.os.Handler.dispatchMessage(Handler.java:100)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at android.os.Looper.loop(Looper.java:194)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at android.app.ActivityThread.main(ActivityThread.java:5371)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at java.lang.reflect.Method.invokeNative(Native Method)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at java.lang.reflect.Method.invoke(Method.java:525)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
03-05 19:02:39.888: E/AndroidRuntime(1092):     at dalvik.system.NativeStart.main(Native Method)
片段代码

public class AppTrip extends Fragment {
    View rootView;
    EditText from_date, to_date;
    DatePickerDialog.OnDateSetListener date;
    static final int DATE_DIALOG_ID = 999;
    Calendar myCalendar;
    int val;
    Context context;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        context = getActivity();
        rootView = inflater.inflate(R.layout.main, container, false);
        from_date = (EditText) rootView.findViewById(R.id.from_date);
        to_date = (EditText) rootView.findViewById(R.id.to_date);
        from_date.setFocusableInTouchMode(false);
        to_date.setFocusableInTouchMode(false);
        date = new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
                // TODO Auto-generated method stub
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                updateLabel(val);
            }

        };
        from_date.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                showDialog(DATE_DIALOG_ID);
                val = 1;
            }
        });

        to_date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDialog(DATE_DIALOG_ID);
                val = 2;
            }
        });
        return rootView;
    }

    protected Dialog showDialog(int dateDialogId) {
        final Calendar now = Calendar.getInstance();
        switch (dateDialogId) {

        case DATE_DIALOG_ID:
            DatePickerDialog _date = new DatePickerDialog(context, date,
                    myCalendar.get(Calendar.YEAR),
                    myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH)) {
                @Override
                public void onDateChanged(DatePicker view, int year,
                        int monthOfYear, int dayOfMonth) {
                    if (year - now.get(Calendar.YEAR) > 1) {
                        view.updateDate(year - 1,
                                myCalendar.get(Calendar.MONTH),
                                myCalendar.get(Calendar.DAY_OF_MONTH));
                    }
                    if (year - now.get(Calendar.YEAR) == 1
                            && monthOfYear > now.get(Calendar.MONTH)) {
                        view.updateDate(year, myCalendar.get(Calendar.MONTH),
                                myCalendar.get(Calendar.DAY_OF_MONTH));
                    }
                    if (year - now.get(Calendar.YEAR) == 1
                            && monthOfYear == now.get(Calendar.MONTH)
                            && dayOfMonth > now.get(Calendar.DAY_OF_MONTH)) {
                        view.updateDate(year, myCalendar.get(Calendar.MONTH),
                                myCalendar.get(Calendar.DAY_OF_MONTH));
                    }
                    if (year < now.get(Calendar.YEAR))

                        view.updateDate(myCalendar.get(Calendar.YEAR),
                                myCalendar.get(Calendar.MONTH),
                                myCalendar.get(Calendar.DAY_OF_MONTH));

                    if (monthOfYear < now.get(Calendar.MONTH)
                            && year == now.get(Calendar.YEAR))
                        view.updateDate(myCalendar.get(Calendar.YEAR),
                                myCalendar.get(Calendar.MONTH),
                                myCalendar.get(Calendar.DAY_OF_MONTH));

                    if (dayOfMonth < now.get(Calendar.DAY_OF_MONTH)
                            && year == now.get(Calendar.YEAR)
                            && monthOfYear == now.get(Calendar.MONTH))
                        view.updateDate(myCalendar.get(Calendar.YEAR),
                                myCalendar.get(Calendar.MONTH),
                                myCalendar.get(Calendar.DAY_OF_MONTH));
                }
            };
            return _date;
        }

        return null;
    }

    private void updateLabel(int val) {
        String myFormat = "dd/MM/yy"; // In which you need put here
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        Log.d("Date value ", "===" + sdf.format(myCalendar.getTime()));
        if (val == 1)
            from_date.setText(sdf.format(myCalendar.getTime()));
        else
            to_date.setText(sdf.format(myCalendar.getTime()));

    }
}
公共类AppTrip扩展片段{
视图根视图;
EditText from_date,to_date;
DatePickerDialog.OnDateSetListener日期;
静态最终整数日期对话框ID=999;
日历我的日历;
int-val;
语境;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
context=getActivity();
rootView=充气机。充气(右布局主,容器,假);
from_date=(EditText)rootView.findviewbyd(R.id.from_date);
to_date=(EditText)rootView.findViewById(R.id.to_date);
from_date.setFocusableInTouchMode(假);
截止日期。setFocusableInTouchMode(假);
日期=新的DatePickerDialog.OnDateSetListener(){
@凌驾
公共无效onDateSet(日期选择器视图,整数年,整数月,
整数(每月的第几天){
//TODO自动生成的方法存根
myCalendar.set(Calendar.YEAR,YEAR);
myCalendar.set(Calendar.MONTH,monthOfYear);
myCalendar.set(Calendar.DAY\u OF\u MONTH,dayOfMonth);
更新标签(val);
}
};
from_date.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
showDialog(日期对话框ID);
val=1;
}
});
to_date.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
showDialog(日期对话框ID);
val=2;
}
});
返回rootView;
}
受保护的对话框showDialog(int-dateDialogId){
final Calendar now=Calendar.getInstance();
开关(日期对话框ID){
案例日期\u对话框\u ID:
DatePickerDialog\u date=新的DatePickerDialog(上下文、日期、,
myCalendar.get(Calendar.YEAR),
myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY\u OF_MONTH)){
@凌驾
公共无效onDateChanged(日期选择器视图,整数年,
int monthOfYear,int dayOfMonth){
如果(年-现在获取(日历年)>1){
视图更新日期(第1年,
myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY/u/u月));
}
if(year-now.get(Calendar.year)=1
&&monthOfYear>now.get(日历月)){
view.updateDate(year,myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY/u/u月));
}
if(year-now.get(Calendar.year)=1
&&MonthHofYear==now.get(Calendar.MONTH)
&&dayOfMonth>now.get(Calendar.DAY OfMonth)){
view.updateDate(year,myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY/u/u月));
}
如果(年<现在获取(日历年))
view.updateDate(myCalendar.get(Calendar.YEAR),
myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY/u/u月));
if(monthOfYear

 myCalendar.get(Calendar.YEAR),
 myCalendar.get(Calendar.MONTH),
 myCalendar.get(Calendar.DAY_OF_MONTH))

showDialog()方法中

您忘记初始化日历myCalendar


您正在使用未初始化的myCalendar实例。尝试使用“现在”而不是“我的日历”。

代码中的所有内容都正常您必须在代码中进行两项更改

首先在创建视图中执行此操作

myCalendar = Calendar.getInstance();
再加上这个

_date.show();
以前

return _date;

内部片段showdialog()方法不起作用。您可以这样做,setonclicklistener from_date并在其中调用DatePickerDialog。做你在活动课上做的其他事情。。
希望这对您有所帮助。

showDialog(int)方法已被弃用。使用Dialogfragment.still我得到了相同的例外情况哪一行你得到了NPE?这一行是myCalendar.get(Calendar.YEAR),在DATE\u DIALOG\u ID:check的情况下
_date.show();
return _date;