【发布时间】:2014-07-22 06:36:07
【问题描述】:
我已经通过了这个link。但是给定的解决方案并不能解决我的问题。所有经验丰富的人建议使用getActivty().getApplicationContext()。但我使用的是普通课程而不是活动。我正在获取所有 UI 值并初始化为我的片段中的对象。所以从那里我试图将它保存在我的数据库中。我正在为没有扩展任何东西的数据库使用普通类。
当我将值从我的主片段传递到数据库类时,我遇到了两个错误:
- 构造函数 DatePickerDialog(TopRatedFragment, DatePickerDialog.OnDateSetListener, int, int, int) 未定义
- 创建方法getApplicationContext()
请给我一些想法来解决这个问题。
这是我的 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();
}
};
}
【问题讨论】:
-
在
Fragment内,使用getActivity()来获取Context。 -
如果您只是在发布的代码中遇到了您提到的错误,那么这无关紧要。构造函数只需要一个 Context 传递给它们;它们是活动还是片段都没有关系。
-
为什么你得到了意见?因为视图是从
View rootView = inflater.inflate(R.layout.activity_main, container,false);膨胀而来的,并且默认情况下,Fragments 与活动上下文绑定,它们是从哪个活动发起的。第二:为什么 DatePickerDialog 给出异常?因为日期选择器需要上下文并且您将片段实例传递给它,所以您可以随时通过getActivity()在片段中检索上下文/活动。希望它能解决您的查询以及异常。 -
是的。我明白了。错误消失了。我可以知道为什么我会遇到这个错误:构造函数 DatePickerDialog 是未定义的。
-
使用
getActivity()而不是TopRatedFragment.this。
标签: android android-fragments android-context