내 작업을 구현하는 방법을 이해하는 데 도움이되기를 바랍니다.교체시 파편 상태에 저장하는 방법
필자는 MainActivity에서 하나 또는 다른 단편을 보여줍니다 (간단하게 FragmentA 및 FragmentB라고 부름). 파편 밖에서 나는 그 내용에 영향을 미칠 수있다.
예를 들어 다음과 같은 경우가 발생합니다. 먼저 FragmentA를로드 한 다음 FragmentB (조건부 이름 State1로 내용을 표시 함)를 누른 다음 FragmentB를 외부에서 State2로 변경 한 다음 FragmentA를로드합니다.
FragmentA 및 FragmentB는 물론 다른 상태 조각을 전환하려면 뒤로 버튼을 사용해야합니다. 조각을 모두 전환하면 addToBackStack (null)이 추가되었습니다.
그러나 조각의 상태를 저장하는 방법?
바깥 쪽에서 상태 조각을 변경하면 분리를 호출하고 즉시 addToBackStack (null)을 첨부합니다. 하지만 뒤로를 누르면 프래그먼트의 마지막 상태가됩니다 .B.
작은 예 : FrameLayout (main_fragment_holder)의 주 활동이 있습니다. 사용자가 NavigationView에서 섹션을 클릭하면 main_fragment_holder (fragmentTransaction.replace())에 NewsFragment 또는 Categories 조각이 표시됩니다. 또한 News Fragment가 표시 될 때 툴바에서 회 전자 (categories_spinner)를 사용하여 뉴스 카테고리를 변경할 수 있습니다.
예를 들어 사용자가 뉴스를 열고 Cat1, Cat2, Cat3으로 카테고리를 변경 한 다음 NavigationView로 CategoriesFragment를 엽니 다.
그리고 사용자가 다시 클릭 할 때 내가 가지고 싶은 다음 CategoriesFragment-> NewsFragment (Cat3 특징) -> NewsFragment (CAT2) - 내가 제대로 구현하는 방법을 모르는
그리고> NewsFragment (CAT1) .
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/main_fragment_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
activity_main_drawer.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_news"
android:title="News" />
<item
android:id="@+id/nav_categories"
android:title="Categories" />
</group>
</menu>
app_bar_main.xml
<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">
<Spinner
android:id="@+id/categories_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
FragmentA를 FragmentB로 바꾸시겠습니까?FragmentB에서 FragmentA로 돌아 가면 다시 FragmentA를 다시 만들지 않습니다. FragmentA의 인스턴스를 재사용하면 상태를 변수에 저장할 수 있습니다. [https://developer.android.com/guide/components/fragments.html#Creating] (https://developer.android.com/guide/components/fragments.html#Creating) –
하나의 조각을 다른 하나의 단편 내에 내용이 변경됩니다. 예를 들어 fragmentB 자체에는 검색 결과가 표시됩니다. fragmentA를 표시 한 다음 FragmentB로 교체합니다. 사용자가 키워드 Key1, Key2 및 Key3에 대한 검색을 수행하면 각각 다른 결과가 표시됩니다. 그런 다음 다시 FragmentB를 FragmentA로 바꿉니 다. 결과적으로, 뒤를 누르면 다음과 같은 결과가 나옵니다 : FragmentB (key3 결과) -> FragmentB (key2 결과) -> FragmentB (key1 결과) -> FragmentA – Anton111111
정말 그렇지 않습니다. 당신의 요지를 얻으십시오. 흐름 과정을보기 위해 코드를 게시 할 수 있습니까? –