2015-10-31 22 views
0

爲什麼在我的片段getActivity()工作,但mContext.getApplicationContext()不?差異btn mContext.get()。getApplicationContext()和getActivity()

mDobPickerDialog = new DatePickerDialog(getActivity(), new OnDateSetListener() { 

      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       Calendar newDate = Calendar.getInstance(); 
       newDate.set(year, monthOfYear, dayOfMonth); 
       mDobEditText.setText(mDateFormatter.format(newDate.getTime())); 
      } 

     },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); 

我mContext被聲明和初始化爲:

private Context mContext; 

public DisplayProfileFragment(Context context) { 
     super(); 
     mContext = context; 
    } 

回答

3

getActivity()返回該片段相關聯的活動。

http://developer.android.com/reference/android/app/Fragment.html#getActivity()

getApplicationContext()返回的全球應用程序上下文。

http://developer.android.com/reference/android/content/Context.html#getApplicationContext()

至於爲什麼getApplicationContext()不會在您所提供的代碼工作,因爲它不應該。您正在爲當前活動創建一個對話框,爲此需要活動上下文,應用程序上下文應該用於像接收者這樣的函數,在應用程序被銷燬時應該銷燬的函數,而不是在活動被銷燬時使用。

0

您可以使用getActivity()。getApplicationContext();

注意:請勿在onActivityCreated()之前使用getActivity(),因爲它在此之前將返回null。

因此,對於您的問題,您可以在onAttach()方法的片段中定義它。

@Override 
public void onAttach(Activity activity) { 
    // TODO Auto-generated method stub 
    super.onAttach(activity); 
    mContext=activity; 
} 

作爲活動從語境延伸。

希望它能幫助你。