Android 方法getApplicationContext()未定义,构造函数DatePickerDialog未定义

Android 方法getApplicationContext()未定义,构造函数DatePickerDialog未定义,android,android-fragments,android-context,Android,Android Fragments,Android Context,我经历过这一切。但给出的解决方案并不能解决我的问题。所有经验丰富的人员建议使用getActivty().getApplicationContext()。但我用的是普通的课堂而不是活动。我将获取所有UI值并初始化为片段中的对象。所以我试着把它保存在我的数据库里。我正在为数据库使用普通类,它没有扩展任何内容 将值从主片段传递到数据库类时,出现两个错误: 构造函数DatePickerDialog(TopRatedFragment,DatePickerDialog.OnDateSetListener,i

我经历过这一切。但给出的解决方案并不能解决我的问题。所有经验丰富的人员建议使用
getActivty().getApplicationContext()
。但我用的是普通的课堂而不是活动。我将获取所有UI值并初始化为片段中的对象。所以我试着把它保存在我的数据库里。我正在为数据库使用普通类,它没有扩展任何内容

将值从主片段传递到数据库类时,出现两个错误:

  • 构造函数DatePickerDialog(TopRatedFragment,DatePickerDialog.OnDateSetListener,int,int)未定义
  • 创建方法getApplicationContext()
  • 请给我一些解决这个问题的办法

    这是我的片段类代码

    public class TopRatedFragment extends Fragment {
        public EditText text1,text2,text3,text4;
        Button date,save;
        TextView textdate;
        DatePicker datepicker;
        ListView expenselist;
        private int myear,mmonth,mday;
        ArrayList<String> DayExpenseList = new ArrayList<String>();
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.activity_main, container,
                false);
            text1 = (EditText) rootView.findViewById(R.id.editText1);
            text2=(EditText) rootView.findViewById(R.id.editText2);
            text3=(EditText) rootView.findViewById(R.id.editText3);
            text4=(EditText) rootView.findViewById(R.id.editText4);
            textdate = (TextView) rootView.findViewById(R.id.textView6);
            save = (Button) rootView.findViewById(R.id.button1);
            date=(Button) rootView.findViewById(R.id.datepicker);
            expenselist = (ListView) rootView.findViewById(R.id.listView1);
            date.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    DatePickerDialog dpd = new DatePickerDialog(TopRatedFragment.this, mDateSetListener, myear, mmonth, mday);
                    dpd.show();
                }
            });
            final Calendar c = Calendar.getInstance();
            myear = c.get(Calendar.YEAR);
            mmonth = c.get(Calendar.MONTH);
            mday = c.get(Calendar.DAY_OF_MONTH);
            save.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String entertainment = text1.getText().toString();
                    String food = text2.getText().toString();
                    String medicine = text3.getText().toString();
                    String travel = text4.getText().toString();
                    DBHelper helper = new DBHelper(getApplicationContext());
                    helper.insertValues(entertainment, food, medicine, travel);
                    DayExpenseList = helper.getValues();
                    setAdapter();
                }
            });
            return rootView;
        }
    
        private void setAdapter()
        {
            expenselist.setAdapter(new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,DayExpenseList));
        }
    
        private void updateDisplay() {
            // TODO Auto-generated method stub
            textdate.setText(new StringBuilder()
                .append(mday).append("-").append(mmonth+1).append("-")
                .append(myear));
        }
    
        private DatePickerDialog.OnDateSetListener mDateSetListener = new 
            DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,
                        int dayOfMonth) {
                    myear=year;
                    mmonth=monthOfYear;
                    mday=dayOfMonth;
                    updateDisplay();
                }
            };
    }
    
    公共类TopRatedFragment扩展了片段{
    公共编辑文本文本1、文本2、文本3、文本4;
    按钮日期,保存;
    TextView textdate;
    日期选择器;
    ListView ExpensList;
    迈耶私人酒店,mday,Ammonth;
    ArrayList DayExpensList=新建ArrayList();
    @凌驾
    创建视图上的公共视图(布局、充气机、视图组容器、,
    Bundle savedInstanceState){
    视图根视图=充气机。充气(R.layout.activity_main,容器,
    假);
    text1=(EditText)rootView.findViewById(R.id.editText1);
    text2=(EditText)rootView.findViewById(R.id.editText2);
    text3=(EditText)rootView.findViewById(R.id.editText3);
    text4=(EditText)rootView.findViewById(R.id.editText4);
    textdate=(TextView)rootView.findViewById(R.id.textView6);
    save=(按钮)rootView.findviewbyd(R.id.button1);
    date=(按钮)rootView.findviewbyd(R.id.datepicker);
    expenselist=(ListView)rootView.findViewById(R.id.listView1);
    date.setOnClickListener(新的OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    //TODO自动生成的方法存根
    DatePickerDialog dpd=新的DatePickerDialog(TopRatedFragment.this,mDateSetListener,myear,Amnoth,mday);
    dpd.show();
    }
    });
    最终日历c=Calendar.getInstance();
    myear=c.get(日历年);
    mmonth=c.get(日历月);
    mday=c.get(日历,月的第天);
    save.setOnClickListener(新的OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    //TODO自动生成的方法存根
    String entertainment=text1.getText().toString();
    字符串food=text2.getText().toString();
    字符串medicine=text3.getText().toString();
    String travel=text4.getText().toString();
    DBHelper=newdbhelper(getApplicationContext());
    助手。插入价值观(娱乐、食品、医药、旅游);
    DayExpensList=helper.getValues();
    setAdapter();
    }
    });
    返回rootView;
    }
    私有void setAdapter()
    {
    setAdapter(新的ArrayAdapter(getApplicationContext(),android.R.layout.simple_list_item_1,DayExpenseList));
    }
    私有void updateDisplay(){
    //TODO自动生成的方法存根
    textdate.setText(新的StringBuilder()
    .append(mday).append(“-”).append(mmonth+1).append(“-”)
    .append(myear));
    }
    私有DatePickerDialog.OnDateSetListener mDateSetListener=new
    DatePickerDialog.OnDateSetListener(){
    @凌驾
    公共无效onDateSet(日期选择器视图,整数年,整数月,
    整数(每月的第几天){
    迈耶=年;
    Ammonth=蒙托夫年;
    mday=月的第几天;
    updateDisplay();
    }
    };
    }
    
    在片段中使用getActivity()而不是getApplicationContext()

    在片段中使用活动的上下文,所以更改

        DBHelper helper = new DBHelper(getApplicationContext());
    

    并使用
    ViewGroup容器
    作为
    final

    或者使用
    getActivity()
    获取活动上下文。

    仅在
    context
    和扩展它的所有类(包括
    activity
    及其变体)中可用。然而,
    Fragment
    并没有扩展它,因此,没有该方法

    相反,
    Fragment
    依赖于
    活动的上下文,可以通过调用来访问该上下文

    错误显示:

  • 构造函数DatePickerDialog(TopRatedFragment,DatePickerDialog.OnDateSetListener,int,int)未定义
  • 创建方法getApplicationContext()
  • 第一个是因为第一个参数需要
    Context
    ,您在其中放置
    Fragment
    ,它不是
    Context
    的子类

    第二个已经在上面解释过了

    将代码更改为

    DatePickerDialog dpd = new DatePickerDialog(getActivity(), mDateSetListener,
                                   myear, mmonth, mday);
    


    应该修复错误。

    片段
    中,使用
    getActivity()
    来获取
    上下文
    。如果您只在发布的代码中获得了您提到的错误,那么这与此无关。构造函数只需要向其传递一个上下文;不管它们是活动还是片段。你为什么要获得这些视图?因为视图是从
    视图根视图=充气器充气的(R.layout.activity\u main,container,false)和片段与启动它们的活动的活动上下文绑定。第二:为什么DatePickerDialog给出异常?因为日期选择器需要上下文并将其传递给片段实例,所以可以通过
    getActivity()
    随时在片段中检索上下文/活动。希望它能解决您的问题,以及异常。是的,我理解。错误已经消失了。我可以知道为什么我会遇到这个错误吗:构造函数DateP
    DatePickerDialog dpd = new DatePickerDialog(getActivity(), mDateSetListener,
                                   myear, mmonth, mday);
    
    DBHelper helper = new DBHelper(getActivity());