2016-10-04 13 views
0

私は1つのホストアクティビティと2つのフラグメントを持っています。アクティビティにOnBackStackChangeListenerを実装して、アクションバーの戻るボタンが一貫した動作を提供するようにしました。画面の向きが変わると、アクティビティが破棄されて再作成されますが、onConfigurationChangedをオーバーライドしないと、オーエメントの変更の結果として重複するフラグメントがバックスタックに追加されないようにする方法はありますか?なぜなら、後ろのボタンは、重複した断片を通ってページするからです。画面の向きが変化したときに重なり合ったフラグメントがバックスタックに追加されないようにする方法

MyActivity

public class DepartmentListActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    overridePendingTransition(0, 0); 
    setContentView(R.layout.activity_department_list); 
    getSupportFragmentManager().addOnBackStackChangedListener(this); 

    DepartmentListFragment fragment = DepartmentListFragment.newInstance(); 

    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.department_list_container, fragment) 
      .addToBackStack("list") 
      .commit(); 

    shouldDisplayHomeUp(); 

} 

@Override 
public void onBackStackChanged() { 
    shouldDisplayHomeUp(); 
} 

public void shouldDisplayHomeUp(){ 
    //Enable Up button only if there are entries in the back stack 
    boolean canback = getSupportFragmentManager().getBackStackEntryCount()>0; 
    getSupportActionBar().setDisplayHomeAsUpEnabled(canback); 
} 

@Override 
public boolean onSupportNavigateUp() { 
    //This method is called when the up button is pressed. Just the pop back stack. 

    if(getSupportFragmentManager().getBackStackEntryCount()>1){ 
     getSupportFragmentManager().popBackStack(); 
    }else{ 
     startActivity(new Intent(this, MainMenuActivity.class)); 
    } 
    return true; 
} 
} 

がFromListAdapter:

Fragment fragment = DepartmentOverviewFragment.newInstance(); 

      ((DepartmentListActivity) context). 
        getSupportFragmentManager(). 
        beginTransaction(). 
        replace(R.id.department_list_container, fragment).addToBackStack("overview").commit(); 

答えて

3

savedInstanceStateがnullの場合にのみ、フラグメントを追加してみてください。

+0

BaseAdapterのフラグメントを切り替えるので、savedInstanceStateを確認できません – BiGGZ

0
if (null == getSupportFragmentManager().findFragmentByTag("someTag")) { 
getSupportFragmentManager() 
    .beginTransaction() 
    .replace(R.id.department_list_container, fragment, "someTag") 
    .addToBackStack("list") 
    .commit(); 
} 
関連する問題