2012-10-22 84 views
0

我有這個問題intent.setClass(getActivity,的.class)與意向(這,的.class)

Launching a new activity - android

,不明白爲什麼原來的代碼是錯誤的。此外,在活動後面更令人困惑,我有下面的代碼,它使用getActivity()有什麼區別爲什麼它在一種情況下工作,而不是另一種?

public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     EditText dobText = (EditText)getActivity().findViewById(R.id.editText1); 
     String dobStr = dobText.getText().toString(); 
     int day = Integer.valueOf(dobStr.replaceAll("([0-9]*)/[0-9]+/[0-9]+","$1")); 
     int month = Integer.valueOf(dobStr.replaceAll("[0-9]+/([0-9]+)/[0-9]+", "$1"))-1; 
     int year = Integer.valueOf(dobStr.replaceAll("[0-9]+/[0-9]+/([0-9]+)", "$1")); 
     return new DatePickerDialog(getActivity(),this, year,month,day); 
    } 

} 

,如何是我在這一個

http://developer.android.com/guide/components/fragments.html

不同前面的問題的情況下(搜索 「intent.setClass(getActivity(),DetailsActivity.class);」 找到例如我指的是)

回答

1

在要擴展DialogFragment這個例子中,這並不活動片段延伸。

這裏您調用Fragment的getActivity()方法,該方法返回片段的附加Activity對象。

在上一個問題中,課程擴展了Activity,所以'這個'是對Activity的引用。

併發症的產生是因爲在上一個問題,你在訪問「」從一個匿名內部類,它這麼想的,從活動延伸,從而訪問封閉的對象,必須指定封裝類,即名MainActivity.this

這裏是關於內部類的Oracle教程,這個語法起初可能會讓人困惑。

http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html

+0

陛下...所以,如果我理解正確的話,我不能用'getActivity'引用一個活動我在,但我倒是應該使用'如果this'或類是匿名的內部' ActivityToReference.this'? – evan54

+0

類Activity中沒有getActivity()方法,因爲它不會添加任何'this'已經做的事情。 但是,由於Fragment沒有從Activity繼承,所以它有'getActivity()'方法。 –