2017-03-19 15 views
0

私は最初のアンドロイドアプリケーションを作成しています。必要な宿題をした後、私はここに助けをもたらす。同じ断片を何度も何度も置き換えるのを避けるには?

フラグメントAは、ナビゲーション・ドロワーから呼び出すことができます。もう一度Navigation Barをスライドさせ、フラグメントAを呼び出すと、そのオーバーラップしているフラグメントAを破棄します。問題はユーザーがホーム画面に戻るために2度クリックする必要があることです。

少数のスクリーンショットとスニペットを共有しています。

Help_FragmentはすでにfindFragmentByTagを使用して存在している場合は、代わりに(チェックすることができフラグメントA(Help_Fragment())

private void createHelp() { 

    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    Log.d(taglaunch, "Switching to Help Fragment"); 
    Fragment fragment = new Help_Fragment(); 
    fragmentTransaction.setCustomAnimations(R.animator.slide_in_left, 
      R.animator.slide_out_right, R.animator.exit_to_left, R.animator.exit_to_right); 
    fragmentTransaction.replace(R.id.app_bar, fragment).addToBackStack(null).commit(); 

} 

のonCreate

protected void onCreate(Bundle savedInstanceState) { 
    Log.d(taglaunch, "on Create - AppDrawer"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_appdrawer); 
    mainActivityAdapter = new MainActivityAdapter(getFragmentManager()); 
    navigate(); 
    switchtofragment(); 
    getFragmentManager().addOnBackStackChangedListener(backStackListener); 

} 

public void switchtofragment() { 
     tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
     tabLayout.addTab(tabLayout.newTab().setText("TAB1")); 
     tabLayout.addTab(tabLayout.newTab().setText("TAB2")); 
     viewPager = (ViewPager) findViewById(R.id.view_pager); 
     viewPager.setAdapter(mainActivityAdapter); 
     tabLayout.setOnTabSelectedListener(this); 
     tabLayout.setupWithViewPager(viewPager); 

    } 

public void navigate() { 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 

} 

Fragment A screenshot.

Navigation Drawer

+0

は、現在表示されたフラグメントは、同じタイプである場合は、「置換」フラグメント、およびという現在の断片(表示)あなたはcreateHelp 'でこのチェックを(行うことができます)'または他の方法であります表示されているもの、ちょうど 'return;' – Yazan

+0

私はあなたがここで答えを見つけることができると思います:http://stackoverflow.com/a/38475373/3436343 – Daniel

+0

@ Yazanは助けてくれてありがとう:) – Mona

答えて

0

の起動)メソッドのFragマネージャー。存在しない場合は、作成することができます。それとは別に、replaceメソッドはプログラム的に追加されたフラグメント、つまりフレームレイアウトのようなコンテナに置き換えられます。しかし、この解決法は単なる回避策にすぎません。これを試してみてください。 :)

コード: -

FragmentManager manager=getSupportFragmentManager(); 
    Help_Fragment fragment1= (Help_Fragment) manager.findFragmentByTag("Help_Fragment"); 
    if(fragment1==null) 
    { 
     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
     Log.d(taglaunch, "Switching to Help Fragment"); 
     Fragment fragment = new Help_Fragment(); 
     fragmentTransaction.setCustomAnimations(R.animator.slide_in_left, 
       R.animator.slide_out_right, R.animator.exit_to_left, R.animator.exit_to_right); 
     fragmentTransaction.replace(R.id.app_bar, fragment,"Help_Fragment").addToBackStack(null).commit(); 
    } 
    else{ 
     // Display a Toast that fragment exists 
    } 
1

の断片が存在する場合、あなたは以下のコードを使用してフラグメントを置き換えることができます。チェックするには、いくつかの方法がある

public void loadFragment(Fragment fragment) { 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.frame_layout, fragment); 
     transaction.commitAllowingStateLoss(); 
    } 
関連する問題