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 にアタッチされた Activity オブジェクトを返す Fragment の getActivity() メソッドを呼び出しています。

前の質問では、クラスは Activity を拡張していたので、「this」は Activity への参照です。

前の質問では、 Activity から拡張されていない匿名の内部クラスから' this 'にアクセスしていたため、複雑さが生じます。そのため、囲んでいるオブジェクトにアクセスするには、囲んでいるクラスの名前、つまりMainActivity.thisを指定する必要があります。

内部クラスに関する Oracle のチュートリアルは次のとおりです。構文は最初は混乱する可能性があります。

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

于 2012-10-22T03:11:33.387 に答える