我有这个问题
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);”找到我所指的例子)
答案 0 :(得分:1)
在此示例中,您正在扩展DialogFragment,这不会从活动延伸,而是片段。
在这里,您调用Fragment的getActivity()方法,该方法返回Fragment的附加Activity对象。
在上一个问题中,该课程正在扩展活动,因此“此”是对活动的引用。
出现这种复杂化的原因是,在上一个问题中,您从匿名内部类访问“ this ”,该内部类不会从Activity扩展,因此要访问封闭对象,您必须指定名称封闭的类,即 MainActivity.this 。
这是关于内部类的Oracle教程,语法最初可能会令人困惑。
http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html