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值并初始化为片段中的对象。所以我试着把它保存在我的数据库里。我正在为数据库使用普通类,它没有扩展任何内容
将值从主片段传递到数据库类时,出现两个错误:
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());