0

我有这个问题

启动一个新的活动 - 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);”找到我所指的例子)

4

1 回答 1

1

在此示例中,您正在扩展 DialogFragment,这不是从Activity而是从Fragment扩展的。

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

在上一个问题中,该类正在扩展 Activity,因此“ this ”是对 Activity 的引用。

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

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

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

于 2012-10-22T03:11:33.387 回答