1

我有一個back navigation問題,因爲它不會恢復最後一個片段。 Android Studio中的所有活動都使用navigation_drawer(ActivityA)和scroll_activity AppCompatActivityActivityB)模板返回導航不會恢復最後一個片段

  • ActivityA顯示fragment_1(OK)
  • 更換fragment_1fragment_2(OK)
  • 開始ActivityB通過點擊一個按鈕fragment_2(OK)
    • 如果我點擊系統後退按鈕,我可以看到ActivityBGOOD
    • 如果我點擊的ActivityBback導航,那麼它顯示fragment_1而不是fragment_2(不好)

我曾嘗試是:

  1. 創建一個靜態變量來控制顯示哪個片段,然後嘗試在onResume()處再次渲染,但它母鹿鼻涕工作。
  2. 跟着這link但不工作。

任何幫助?由於

+0

你在fragment_2中嘗試過'setRetainInstance(true)'嗎? –

+0

在哪裏可以使用?我把它放在'onCreateView'中,它沒有任何作用。 –

+0

如果您在使用片段時自定義後退導航,請在Activity中使用此行.Fragment currentfragment = getSupportFragmentManager()。findFragmentById(R.id.view); which給出當前可見片段實例... if(currentfragment instanceof yourFragment) {//您的代碼} – Vishwa

回答

1

我忘了一個簡單的解決方案是Activity Launch Mode。我修改了Manifest文件中的活動,並且一切正常。

<activity 
      android:name=".ActivityA" 
      android:launchMode="singleTask" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 

的問題是back navigation按鈕嘗試再次創建ActivityA(也許這是因爲滾動活動模板行爲)。

1

嗨阮我創造了同樣的場景,但在上面得到fragment_2從activityB

回來後

這是我的代碼 `公共類FirstActivity擴展ActionBarActivity {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_first); 
    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment1()).commit(); 
    } 
} 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment1 extends Fragment { 

    public PlaceholderFragment1() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_first, container, false); 
     Button button = (Button) rootView.findViewById(R.id.btn); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       getActivity().getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment2()).commit(); 
      } 
     }); 
     return rootView; 
    } 
} 

public static class PlaceholderFragment2 extends Fragment { 

    public PlaceholderFragment2() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_second, container, false); 
     Button button = (Button) rootView.findViewById(R.id.btn); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(getActivity(), Secondctivity.class); 
       startActivity(intent); 
      } 
     }); 
     return rootView; 
    } 
} 

} `

這是我的清單文件

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".FirstActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".Secondctivity" 
     android:label="@string/title_activity_secondctivity" > 
    </activity> 
</application> 
+0

我可以試試這個,但不推薦使用'ActionBarActivity'。目前,我使用'AppCompatActivity'和Android Studio提供的模板。 –