Android используя Fragment без расширения класса - PullRequest
0 голосов
/ 27 апреля 2020

Это довольно простой вопрос ... я хотел бы использовать очень простые фрагменты и сказать им, какой макет раздувать, без необходимости создавать класс для каждого фрагмента и переопределить метод onCreateView

Проще говоря, я хотел бы сделать:

Fragment f = new Fragment();
            f.loadfromlayout(R.layout.layout);

Есть ли способ достичь этого?

ближайший я получаю:

new Fragment() {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_send_screenshot_step1, container, false);
                                }
                            }

=== =================== ОБНОВЛЕНИЕ ===================

Просто чтобы немного уточнить больше моих требований. Я пытаюсь добиться этого: https://developer.android.com/training/animation/screen-slide https://developer.android.com/training/animation/anim_screenslide.mp4

Используйте ViewPager для создания пошагового мастера, как показано на официальном android документация. В моем примере будет загружен очень простой макет для каждого "шага" (каждый шаг является фрагментом) ... и чтобы получить его, используя компоненты android по умолчанию, мне нужно создать новый класс, расширяющий Fragment для каждого шага в моем мастере все они - одно и то же, просто определяя разную компоновку в onCreateView

, что, на мой взгляд, является очень нелегким и много повторяющегося кода. я бы хотел избежать

1 Ответ

1 голос
/ 27 апреля 2020

Как отмечали многие люди в комментариях, такое поведение изначально не предполагалось в android.

Я нашел решение, которое будет работать для моего случая, и все еще в порядке.

public class GenericFragment extends Fragment {

    public static GenericFragment newInstance(@LayoutRes int layout) {
        Bundle b = new Bundle();
        b.putInt("layout", layout);

        GenericFragment g = new GenericFragment();
        g.setArguments(b);
        return g;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(getArguments().getInt("layout"), container, false);
    }
}

, таким образом, мне нужен только один единственный класс, расширяющий Fragment, и я могу иметь столько страниц с разными макеты, которые я хочу в своих мастерах ... до тех пор, пока на страницах не указано "конкретное c поведение"

...