我正在尝试写一个ListFragment中的sqlite数据库,问题是从这个片段中获取Context。
奇怪的是,调用getActivity()会返回onActivityCreated方法中的上下文,但不会返回其他位置(甚至在该调用之后)。我甚至尝试将上下文存储在类变量mContext中,但是下次我访问该变量时它会返回null!
关于这里发生了什么的任何想法?片段生命周期中发生了什么奇怪的事情?
公共类DayFragment扩展了ListFragment {
private String day;
private Context mContext;
public DayFragment() {
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] values = new String[] { day, "Android", "iPhone", "WindowsMobile" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
mContext = this.getActivity();
}
public void createEntry() {
EntriesDataSource datasource = new EntriesDataSource(mContext);
datasource.open();
Entry entry = new Entry();
entry.setDay(day);
entry.setTitle("ok");
entry.setTime("09:00");
}
}
答案 0 :(得分:1)
根据this question和this question中的回复,如果您尚未附加片段,则不会返回上下文。
从第二个问题:
我建议添加一个
onAttach(活动活动)方法给你的片段并放一个 断点并看到它相对于你的电话被调用 到'asd()'。你会看到它是在你的方法之后被调用的 打电话给'asd()'退出。 'onAttach'电话是在哪里 片段附加到其活动,从此点getActivity() 将返回非null(nb还有一个onDetach()调用)。
希望这有帮助。