0

내 작업을 구현하는 방법을 이해하는 데 도움이되기를 바랍니다.교체시 파편 상태에 저장하는 방법

필자는 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> 

+1

FragmentA를 FragmentB로 바꾸시겠습니까?FragmentB에서 FragmentA로 돌아 가면 다시 FragmentA를 다시 만들지 않습니다. FragmentA의 인스턴스를 재사용하면 상태를 변수에 저장할 수 있습니다. [https://developer.android.com/guide/components/fragments.html#Creating] (https://developer.android.com/guide/components/fragments.html#Creating) –

+0

하나의 조각을 다른 하나의 단편 내에 내용이 변경됩니다. 예를 들어 fragmentB 자체에는 검색 결과가 표시됩니다. fragmentA를 표시 한 다음 FragmentB로 교체합니다. 사용자가 키워드 Key1, Key2 및 Key3에 대한 검색을 수행하면 각각 다른 결과가 표시됩니다. 그런 다음 다시 FragmentB를 FragmentA로 바꿉니 다. 결과적으로, 뒤를 누르면 다음과 같은 결과가 나옵니다 : FragmentB (key3 결과) -> FragmentB (key2 결과) -> FragmentB (key1 결과) -> FragmentA – Anton111111

+0

정말 그렇지 않습니다. 당신의 요지를 얻으십시오. 흐름 과정을보기 위해 코드를 게시 할 수 있습니까? –

답변

0

@ roshan-shan은 좋은 해결책을 제시했습니다.

예를 읽었습니다. NewsFragment를 열고 카테고리 3, 2를 열면 1을 읽습니다. 이 NewsFragment에서 step_variables에 단계를 저장해야합니다 (수동으로 뒤로 버튼을 처리하기 위해). 그 후 NewsFragment를 CategoriesFragment로 바꿉니다. 이제 CategoriesFragment에서 버튼을 누르면 NewsFragment가 복원되고 이제 은 저장 한 step_variables에서 수동으로 버튼을 제어해야합니다.