Изменить макет фрагмента при изменении ориентации - PullRequest
4 голосов
/ 16 сентября 2011

У меня следующая проблема:

У меня есть TabActivity, который показывает FragmentActivity на одной из его вкладок.

Это FragmentActivity добавляет ListFragment, когдащелкнув по элементу этого ListFragment, добавляется фрагмент (также в backstack) и отображается.

Теперь мне нужно изменить расположение этого Fragment, чтобы изменить его при переходе в альбомную ориентацию.

Но я совершенно не знаю, где осуществить это изменение.Я уже создал, чтобы исправить макет в папке layout-land.Но где правильная точка для его установки?

Ответы [ 2 ]

20 голосов
/ 11 июня 2013

Предупреждение: это может быть ответ перед леденцом на палочке.

A Fragment не переувеличивается при изменении конфигурации, но вы можете добиться эффекта следующим образом, создав его с помощью FrameLayout и (повторно) заполнив его вручную:

public class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
        FrameLayout frameLayout = new FrameLayout(getActivity());
        populateViewForOrientation(inflater, frameLayout);
        return frameLayout;
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        populateViewForOrientation(inflater, (ViewGroup) getView());
    }

    private void populateViewForOrientation(LayoutInflater inflater, ViewGroup viewGroup) {
        viewGroup.removeAllViewsInLayout();
        View subview = inflater.inflate(R.layout.my_fragment, viewGroup);

        // Find your buttons in subview, set up onclicks, set up callbacks to your parent fragment or activity here.
    }
}

Я не особо доволен getActivity() и связанными звонками здесь, но я не думаю, что есть другой способ получить эти вещи.

Обновление: Удалено приведение от ViewGroup к FrameLayout и используется LayoutInflater.from() и третий параметр inflate() вместо явного добавления представления.

0 голосов
/ 16 сентября 2011

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

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