1

Я пытаюсь написать sqlite db в ListFragment, проблема заключается в получении контекста из этого фрагмента.Android - доступ к контексту с getActivity в ListFragment возвращает null

Странно, что вызов getActivity() возвращает контекст в методе onActivityCreated, но не в другом месте (даже после этого вызова). Я даже попытался сохранить контекст в переменной класса mContext, но в следующий раз, когда я получу эту переменную, она вернется в нуль!

Любые идеи о том, что здесь происходит? Что-то странное происходит в жизненном цикле Fragment?

общественного класса 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

Не знаю ответа, но хотелось бы упомянуть, что лучше использовать getActivity(). GetBaseContext(), поскольку экземпляр активности, к которому прикреплен ваш фрагмент, может меняться в течение всего жизненного цикла фрагмента. Я знаю, если вы вызываете getActivity() на определенных этапах жизни фрагмента, он может вернуть null. Например, когда ваша деятельность выходит из поля зрения (activity.onPause()), фрагмент.getActivity() может возвращать значение null. – Tenfour04

+0

Спасибо за ввод, фрагмент на экране, когда я вызываю getActivity(). – gregor

ответ

1

В соответствии с ответом на this question и this question, если вы еще не прикрепил ваш фрагмент пока он не вернется контекст.

От второго вопроса:

Я хотел бы предложить, добавив метод

onAttach (активность активности) на ваш фрагмент и положить точку останова на ней и видеть, когда его называют по отношению к ваш звонок на 'asd()'. Вы увидите, что он вызывается после метода, в котором вы вызываете вызов «asd()», выйдя из выходов 443. Вызов 'onAttach' - это то, где фрагмент связан с его активностью, и с этого момента getActivity() вернет ненулевое значение (nb также есть вызов onDetach()).

Надеюсь, это поможет.

+0

хорошая первая ссылка;) – dalf

Смежные вопросы