8

Google Play に似たレイアウトを作成しています。フラグメントを必要とする ViewPager を使用しています。一部のサイトでは、フラグメントには空のコンストラクターが必要であると言われていますが、developer.android.com の例にはコンストラクターが含まれていないため、少し混乱しています。コードは次のようになります。

public static class DemoObjectFragment extends Fragment {
    public static final String ARG_OBJECT = "object";

    @Override
    public View onCreateView(LayoutInflater inflater,
            ViewGroup container, Bundle savedInstanceState) {
        // The last two arguments ensure LayoutParams are inflated
        // properly.
        View rootView = inflater.inflate(
                R.layout.fragment_collection_object, container, false);
        Bundle args = getArguments();
        ((TextView) rootView.findViewById(android.R.id.text1)).setText(
                Integer.toString(args.getInt(ARG_OBJECT)));
        return rootView;
    }
}

フラグメントにコンストラクターを含める必要がありますか、それともコンストラクターを省略できますか?

4

2 に答える 2

10

Java コンパイラーは、コンストラクターを持たないクラスに、デフォルトの引数のないコンストラクター (質問で言及している「空のコンストラクター」) を自動的に追加します。

次の空のクラス:

public class A {
}

本体が空の引数なしのコンストラクターを持つ次のクラスと同等です。

public class A {

    public A() {
    }

}

1 つ以上の引数を持つ別のコンストラクターを含める場合にのみ、引数なしのコンストラクターを明示的に追加する必要があります。この場合、コンパイラーはそれを追加しないためです。

于 2013-03-07T16:52:01.270 に答える
1

コンストラクターを追加しない場合、コンストラクターを呼び出すと、スーパー コンストラクターが参照されます (空のコンストラクターを作成するのと同じです)。ただし、他のコンストラクターを作成する場合 (フラグメントでは望ましくない場合は、onCreate でやりたいことを何でも行います。フラグメントは常にそれでインスタンス化されるとは限りません。システムがフラグメントをインスタンス化し、空のコンストラクターが呼び出されることがあります)。空のものも提供する必要があります。

于 2013-03-07T16:50:46.170 に答える