intent.setClass(getActivity,.class)vs Intent(this,.class)

时间:2012-10-22 02:39:16

标签: android android-intent

我有这个问题

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 个答案:

答案 0 :(得分:1)

在此示例中,您正在扩展DialogFragment,这不会从活动延伸,而是片段

在这里,您调用Fragment的getActivity()方法,该方法返回Fragment的附加Activity对象。

在上一个问题中,该课程正在扩展活动,因此“”是对活动的引用。

出现这种复杂化的原因是,在上一个问题中,您从匿名内部类访问“ this ”,该内部类不会从Activity扩展,因此要访问封闭对象,您必须指定名称封闭的类,即 MainActivity.this

这是关于内部类的Oracle教程,语法最初可能会令人困惑。

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