我已经完成了这个link。但是给定的解决方案并没有解决我的问题。所有经验丰富的人都建议使用getActivty().getApplicationContext()
。但我使用的是普通课而不是活动课。我获取了所有UI值并初始化为片段中的对象。所以我从那里尝试将其保存在我的数据库中。我正在使用普通类来处理没有扩展任何内容的数据库。
当我将主片段中的值传递给数据库类时,我遇到了两个错误:
请给我一些解决这个问题的建议。
这是我的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();
}
};
}
答案 0 :(得分:1)
getApplicationContext()
仅适用于Context
以及所有正在扩展它的类(包括Activity
及其变体)。但是,Fragment
并未对其进行扩展,因此也没有这种方法。
相反,Fragment
取决于Activity
的上下文,可以通过调用getActivity()
来访问。
错误说:
- 构造函数DatePickerDialog(TopRatedFragment,DatePickerDialog.OnDateSetListener,int,int,int)未定义
- create method getApplicationContext()
醇>
第一个是因为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()
获取活动背景。