2016-05-12 4 views
1

私は自分のアプリでナビゲーションドロワーを使用しています。ドロワーの各アイテムがフラグメントを開始します。フラグメントが表示されていて、戻るボタンが押されている場合は、アクティビティで最初のフラグメントを開始します。私はAbtFragmentまたはContaFragmentで探していますし、バックボタンが押された場合 バックスプレッドの最初のフラグメントにスムーズに戻る方法

は、expatiateするために、私は活動が開始または HomeFragmentに戻りたいです。 onBackPressedから

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     id = item.getItemId(); 

     Fragment fragment = null; 

     if (id == R.id.menu_home) { 
      fragment = new HomeFragment(); 
     } 

     if (id == R.id.about_blog) { 
      fragment = new AbtFragment(); 


     } else if (id == R.id.nav_contri) { 
      fragment = new ContFragment(); 

     } else if (id == R.id.nav_contact) { 
      fragment = new ContaFragment(); 

     } else if (id == R.id.nav_privy) { 
      fragment = new PageFragment(); 

     } else if (id == R.id.nav_advert) { 
      fragment = new PageFragment(); 

     } 

     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
     ft.replace(R.id.content_frame, fragment, "visible_fragment"); 
     ft.addToBackStack(null); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     ft.commit(); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

    @Override 
     public void onBackPressed() { 
      DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
      if (drawer.isDrawerOpen(GravityCompat.START)) { 
       drawer.closeDrawer(GravityCompat.START); 
      } else { 
       super.onBackPressed(); 
      } 
      if (getSupportFragmentManager().getBackStackEntryCount() >= 1) { 
       navigationView.setCheckedItem(R.id.menu_home); 
       navigationView.getMenu().performIdentifierAction(R.id.menu_home, 0); 
      } 

     } 

私の活動の

パートは、私がbackstackにおけるフラグメントの数をチェックし、それがより大きいですまたは1に等しい場合HomeFragmentを開始するが、これは動作していないのです正しく。 は、例えば、私はAbtFragment、その後、ContFragmentを開始し、私は戻ってボタンを押すと、AbtFragmentHomeFragment前に、画面上の最初のちらつきが表示されますされます。

どうすればよいですか?

HomeFragmentは、アクティビティが起動されたとき、したがって、それはデフォルトで起動のデフォルトfrgamentです。

+0

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { NavigationView navigationView = null; Toolbar toolbar = null; FragmentManager fragmentManager = getSupportFragmentManager(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //set initial fragment to 'new' instead addFragment(new NewFragment(), true); //Set the toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //Set navigation drawer DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { //put your alert dialog code here // if (getFragmentManager().getBackStackEntryCount() == 0) ... } } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); // Replace these with your own menu items switch (id) { case R.id.nav_start: addFragment(new StartFragment(), true); break; case R.id.nav_save: addFragment(new SaveFragment(), true); break; case R.id.nav_raw: addFragment(new RawFragment(), true); break; case R.id.nav_gyroscope: addFragment(new GyroscopeFragment(), true); break; } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } public void addFragment(Fragment fragment, Boolean addToBackStack) { if (fragment != null) { FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) .addToBackStack(null) .commit(); } } } 
addToBasckStack()。あなたのfragmentManager.replace()コードの下にHomeFragmentを追加してください。 –

+0

@RusheelJain:わかりません。 – X09

答えて

0

+0

ありがとうございます、私のコードをもう一度見てください。私は 'position'ではなく' id'を使用しています。私はあなたが何を意味するのか理解していませんでした。 "displayView()はあなたが見たいビューです" – X09

+0

changes – UclidesGil

+0

"と入力して、allowBackPressedメソッドを定義して、ロジックをバックにしてもしなくてもかまいません。"答えにこのロジックを含めることはできますか? – X09

関連する問題