Android - 在ListFragment中使用getActivity访问上下文返回null

时间:2013-09-12 13:53:52

标签: android android-fragments nullpointerexception android-activity

我正在尝试写一个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");
}
}

1 个答案:

答案 0 :(得分:1)

根据this questionthis question中的回复,如果您尚未附加片段,则不会返回上下文。

从第二个问题:

  

我建议添加一个

     

onAttach(活动活动)方法给你的片段并放一个   断点并看到它相对于你的电话被调用   到'asd()'。你会看到它是在你的方法之后被调用的   打电话给'asd()'退出。 'onAttach'电话是在哪里   片段附加到其活动,从此点getActivity()   将返回非null(nb还有一个onDetach()调用)。

希望这有帮助。