2012-10-22 47 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()'方法。 –