Android: должен ли я добавить пустой конструктор к фрагменту, используемому в ViewPager

Я делаю макет, похожий на 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;
    }
}

Так требуется ли включать конструктор во фрагмент или я могу просто опустить конструктор?

2 ответов


компилятор Java автоматически добавляет конструктор no-args по умолчанию (который является "пустым конструктором", на который вы ссылаетесь в вопросе) к любому классу, который не имеет конструктора.

следующий пустой класс:

public class A {
}

эквивалентно следующему классу с конструктором no-args с пустым телом:

public class A {

    public A() {
    }

}

вы должны явно добавить конструктор no-args только при включении другого конструктора с одним или несколькими аргументами, потому что в этом случае компилятор не добавит.


Если вы не добавляете конструктор, вызов конструктора будет ссылаться на супер конструктор (то же самое, что и создание пустого конструктора). Но если вы создадите любой другой конструктор (не желаемый с фрагментами, делайте все, что хотите сделать в onCreate, ваш фрагмент не всегда будет создан с ним, иногда система будет создавать экземпляр фрагмента и будет вызываться пустой конструктор), чем вам нужно предоставить также пустой.