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

时间:2014-07-22 06:36:07

标签: android android-fragments android-context

我已经完成了这个link。但是给定的解决方案并没有解决我的问题。所有经验丰富的人都建议使用getActivty().getApplicationContext()。但我使用的是普通课而不是活动课。我获取了所有UI值并初始化为片段中的对象。所以我从那里尝试将其保存在我的数据库中。我正在使用普通类来处理没有扩展任何内容的数据库。

当我将主片段中的值传递给数据库类时,我遇到了两个错误:

  1. 构造函数DatePickerDialog(TopRatedFragment,DatePickerDialog.OnDateSetListener,int,int,int)未定义
  2. create method getApplicationContext()
  3. 请给我一些解决这个问题的建议。

    这是我的Fragment类代码。

    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();
                }
            };
    }
    

3 个答案:

答案 0 :(得分:1)

getApplicationContext()仅适用于Context以及所有正在扩展它的类(包括Activity及其变体)。但是,Fragment并未对其进行扩展,因此也没有这种方法。

相反,Fragment取决于Activity的上下文,可以通过调用getActivity()来访问。

错误说:

  
      
  1. 构造函数DatePickerDialog(TopRatedFragment,DatePickerDialog.OnDateSetListener,int,int,int)未定义
  2.   
  3. create method getApplicationContext()
  4.   

第一个是因为DatePickerDialog期望第一个参数Context,您放置的Fragment不是Context的子类。

上面已经解释了第二个。

将代码更改为

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

DBHelper helper = new DBHelper(getActivity());

应该修复错误。

答案 1 :(得分:0)

在片段中,您使用getActivity()而不是getApplicationContext()

答案 2 :(得分:0)

在Fragment中使用activity的上下文,所以改变

    DBHelper helper = new DBHelper(getApplicationContext());

    DBHelper helper = new DBHelper(container.getContext());

并使用ViewGroup container作为final

或使用getActivity()获取活动背景。