Изменить вид в Android Studio - PullRequest
       9

Изменить вид в Android Studio

0 голосов
/ 08 ноября 2018

Я пробую на другом форуме, спасибо за ответ, но это было слишком сложно, хотя !! :)

Ответы [ 4 ]

0 голосов
/ 08 ноября 2018

Прежде всего вам нужно иметь рамку макета в вашей основной деятельности, где вы можете размещать фрагменты и показывать своим пользователям.Это можно сделать так:

<android.support.constraint.ConstraintLayout 
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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".HomeActivity"
tools:showIn="@layout/app_bar_home">

<FrameLayout

    android:id="@+id/frm"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp">

</FrameLayout>

Теперь в макете фрейма (id = frm) вы можете размещать различные фрагменты на основе нажатий кнопок вашими пользователями.Теперь по умолчанию поместите первый фрагмент в макет фрейма и в этом фрагменте есть кнопка.Что можно сделать, добавив следующую строку в основное занятие:

fragmentTransaction.replace(R.id.frm,new FirstFragment()).addToBackStack(null).commit();

После нажатия этой кнопки вы можете написать логику, чтобы заменить 1-й фрагмент на 2-й фрагмент.Используйте приведенный ниже пример кода:

Ваш 1-й фрагмент:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:background="@color/litegrey">

    <Button
      android:id="@+id/frag2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Go to fragment 2" />

</LinearLayout>

Логика для перехода к следующему слайду (это следует добавить в ваш 1-й фрагмент):

frag2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            fragmentTransaction.replace(R.id.frm,new SecondFragment()).addToBackStack(null).commit();
        }
    });
0 голосов
/ 08 ноября 2018

вот документация FragmentTransaction.replace ()

Первый параметр - это идентификатор контейнера, который содержит ваши фрагменты, а не идентификатор вашего макета

Второй - это фрагмент фрагмента, который вы хотите отобразить.

Как правило, что-то вроде этого сделано:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, myFragment);
fragmentTransaction.commit();
0 голосов
/ 08 ноября 2018

Вы можете создать одно действие, которое содержит frameLayout с идентификатором, аналогичным фрагменту фрагмента.

затем из своей деятельности вы делаете следующее:

Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();

, который поместит один фрагмент в макет вашей Деятельности. Когда вы хотите заменить это, вы просто создаете второй фрагмент и делаете то же самое. Если вы хотите сделать это проще, просто используйте его как метод:

public void replaceFragment(Fragment fragment, Context context) {
    FragmentTransaction transaction = context.getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

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

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

РЕДАКТИРОВАТЬ: Если вы хотите переключаться назад и вперед с помощью кнопки, добавьте кнопку в макет вашей деятельности и установите прослушиватель onClick. Затем используйте флаг, чтобы выбрать, какой фрагмент отображать.

логическое значение isFragmentOneDisplayed;

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isFragmentOneDisplayed) {
                FragmentTwo fragment = new FragmentTwo();
                replaceFragment(fragment, MainActivity.this);
                isFragmentOneDisplayed = false;
             } else {
                 FragmentOne fragment = new FragmentOne();
                 replaceFragment(fragment, MainActivity.this);
                 isFragmentOneDisplayed = true;
             }
        }
    });
0 голосов
/ 08 ноября 2018

Вы должны создать конкретный макет для своего фрагмента в макете активности и указать его идентификатор в методе замены. Для получения дополнительной информации прочитайте фрагмент документацию

...