2016-05-12 20 views
1

我在我的應用程序中使用導航抽屜,抽屜中的每個項目都會啓動一個片段。如果片段在視圖中,並且後退按鈕被按下,我希望活動啓動第一個片段。如何順利地回到第一個背部片段

爲了闡述,如果我在看AbtFragmentContaFragment和後退按鈕被按下時,我想的活動啓動或返回到HomeFragment。我的活動

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); 
      } 

     } 

onBackPressed

部分,我檢查了在堆棧中片段的數量,然後開始HomeFragment,如果它是大於或等於一,但是這是不工作正常。 例如,如果我開始AbtFragment,然後ContFragment,我按下返回按鈕,AbtFragment將將被顯示在屏幕上第一閃爍之前HomeFragment

請問我該如何糾正?

注意HomeFragment是默認frgament因此它在默認情況下啓動時的活動推出。

+0

addToBasckStack()。在你的fragmentManager.replace()代碼下面添加HomeFragment代碼 –

+0

@RusheelJain:我不明白你。 – X09

回答

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(); 

    } 
} 
} 
+0

謝謝,但請再次看看我的代碼,我正在使用'id'而不是'position',我不明白你的意思,「displayView()是你希望看到的視圖」 – X09

+0

ok請檢查新的更改 – UclidesGil

+0

「,然後你定義一個方法allowBackPressed與邏輯,以允許後退按或不」,你可以pleassssssse,包括這個邏輯的答案? – X09

相關問題