5

有一個similar question其中大多數答案建議使用getActivity()爲了獲得片段的上下文,但如何獲得對活動/上下文的引用(如果片段被分離)(在這種情況下,getActivity()返回null)?獲取分離片段中的上下文/活動?

我的情況是我的片段啓動了一個AsyncTask,完成後調用片段的onSuccess()方法。但是我的片段的onSuccess()方法需要一個上下文來顯示Toast消息或訪問共享首選項。那麼有沒有一種可靠的方法來獲取上下文?

我正在考慮的一種方法是將一個上下文對象傳遞給我的AsyncTask構造函數,並將其傳回給我前面提到的onSuccess()回調方法 - 但這會導致內存泄漏嗎?

(NB - 這裏有一個答案here,顯示如何檢索當前活動,但同樣,它需要一個有效的上下文)

+0

你試過getApplicationContext()嗎? – 2015-03-02 11:43:33

+1

onattach方法首先被調用,因爲您將獲得活動引用,存儲並使用它。 – Dev 2015-03-02 11:46:09

回答

2

使用這個在您的片段:

private Context context; 

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     context = activity; 
    } 

然後使用右鍵你想要的地方

+0

謝謝,但是這種方法存在內存泄漏的可能嗎? – 2017-03-08 21:31:50

0

當你輸入片段時,你應該在創建視圖後存儲上下文。

Context context; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_photos, container, false); 
     MainView = rootView; 
     context = getActivity().getApplicationContext(); 
     return rootView; 
    } 

在片段中使用該上下文,無論你想要什麼。