Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
alessfan
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 8
#1

Activity в Portrait/Landscape Orientation с разными фрагментами - Android

27.09.2016, 10:16. Просмотров 158. Ответов 5
Метки нет (Все метки)

Подскажите, как реализовать два разных фрагмента в Activity в Portrait/Landscape Orientation.
Нужно, чтобы в Portrait загружался один фрагмент, а в Landscape совершенно другой. Помещаю один content_layout в /layout-land и там даю id и layout на FragmentLandscape. Всегда грузится только один фрагмент и при перевороте просто пустой экран.

Привожу пример:

MainActivity.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }
}
FragmentPortrait.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class FragmentPortrait extends Fragment {
 
    public FragmentPortrait() {
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_portrait, container, false);
    }
}
FragmentLandscape.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class FragmentLandscape extends Fragment {
 
    public FragmentLandscape() {
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_landscape, container, false);
    }
}
/layout/activity_main
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.test.testfragments.MainActivity">
 
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 
    </android.support.design.widget.AppBarLayout>
 
    <include layout="@layout/content_main" />
 
</android.support.design.widget.CoordinatorLayout>
/layout/content_main
XML
1
2
3
4
5
6
7
8
9
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/portraitFragment"
    android:name="com.test.testfragments.FragmentPortrait"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:layout="@layout/fragment_portrait" />
/layou/fragment_portrait
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FragmentPortrait">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Portrait"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:textStyle="bold"
        android:textSize="30sp" />
 
</RelativeLayout>
/layout-land/content_main
XML
1
2
3
4
5
6
7
8
9
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/landscapeFragment"
    android:name="com.test.testfragments.FragmentLandscape"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:layout="@layout/fragment_landscape"/>
/layout-land/fragment_landscape
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FragmentLandscape">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Landscape"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:textStyle="bold"
        android:textSize="30sp" />
 
</RelativeLayout>
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2016, 10:16     Activity в Portrait/Landscape Orientation с разными фрагментами
Посмотрите здесь:

Из одного Activity получить значение другого Activity Android
Обрезка фотографии одновременно для обычного и landscape режимов Android
Из одной Activity запустить функцию другой Activity Android
Как вызвать Activity не из Activity? Android
Android Переход между фрагментами
Android Работа с фрагментами
Android Orientation в зависимости от пропорций экрана
Android Кастомный View всегда оказывается слева при landscape ориентации
Работа с фрагментами Android
Создание Activity в другом Activity Android
Android Вызвать из одной activity функцию другой activity
Операции с фрагментами Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
27.09.2016, 12:22     Activity в Portrait/Landscape Orientation с разными фрагментами #2
Убери фрагменты из разметки и загружай их программно при старте Activity, предварительно проверив ориентацию.
Паблито
2012 / 1754 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 1
27.09.2016, 15:30     Activity в Portrait/Landscape Orientation с разными фрагментами #3
че-то многовато разметок и классов

должно быть так - один класс фрагмента и две разметки с одинаковыми названиями в папках layout и layout-land
PROFIT
alessfan
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 8
27.09.2016, 15:40  [ТС]     Activity в Portrait/Landscape Orientation с разными фрагментами #4
Цитата Сообщение от OlegJV Посмотреть сообщение
Убери фрагменты из разметки и загружай их программно при старте Activity, предварительно проверив ориентацию.
Спасибо! Данный способ мне помог.

Цитата Сообщение от Паблито Посмотреть сообщение
че-то многовато разметок и классов
должно быть так - один класс фрагмента и две разметки с одинаковыми названиями в папках layout и layout-land
PROFIT
Спасибо! Нужно было именно два разных фрагмента с разными разметками. Абсолютно разные фрагменты для Portrait и Landscape.
Паблито
2012 / 1754 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 1
27.09.2016, 15:49     Activity в Portrait/Landscape Orientation с разными фрагментами #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
тогда проще было сделать так
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.test.testfragments.MainActivity">
 
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 
    </android.support.design.widget.AppBarLayout>
 
    <fragment 
    android:id="@+id/portraitFragment"
    android:name="com.test.testfragments.FragmentPortrait"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
 
</android.support.design.widget.CoordinatorLayout>
и для landscape соответственно другая разметка активити в которой другой фрагмент
alessfan
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 8
27.09.2016, 16:28  [ТС]     Activity в Portrait/Landscape Orientation с разными фрагментами #6
Цитата Сообщение от Паблито Посмотреть сообщение
тогда проще было сделать так
Спасибо! С вашей разметкой работает тоже. Только немогу понять. В первоначальном моем варианте по сути тоже самое, только на два layout больше (content_main). И мой первый вариант не работал. Вероятно где-то допустил ошибку.
Yandex
Объявления
27.09.2016, 16:28     Activity в Portrait/Landscape Orientation с разными фрагментами
Ответ Создать тему
Опции темы

Текущее время: 03:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru