2017-03-17 133 views
0

我想實現onBackPress到我的片段,但我不知道如何。當我去另一個片段(在這種情況下,我的片段是從我的ActivityHome和我使用標準的NavigationDrawer從Android stuudio)。如何實現onBackPress從導航抽屜中的片段到MainActivity

這裏是我的ActivityHome

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

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


     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 = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     FragmentHome fragment = new FragmentHome(); 
     fragmentTransaction.add(R.id.containerID, fragment); 
     fragmentTransaction.commit(); 

    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_home, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_logout) { 
      Toast.makeText(getApplicationContext(), 
        "Akun anda telah dikeluarkan!", Toast.LENGTH_LONG).show(); 
      Intent logout = new Intent(ActivityHome.this, ActivityMain.class); 
      startActivity(logout); 

      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 

     int id = item.getItemId(); 

     if(id == R.id.nav_home){ 
      ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, FragmentHome.newInstance()).commit(); 
     }else if (id == R.id.nav_profile){ 
      ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, Profile.newInstance()).commit(); 
     } 
     else if (id == R.id.nav_history){ 
      ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, History.newInstance()).commit(); 
     } 
     else if (id == R.id.nav_about_us){ 
      ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, AboutUs.newInstance()).commit(); 
     } 
     else if (id == R.id.nav_ganti_kata_sandi){ 
      ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, GantiKataSandi.newInstance()).commit(); 
     } 
     else if (id == R.id.nav_share){ 
      ActivityHome.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, Share.newInstance()).commit(); 
     } 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

代碼,我希望能跟大家能幫助我與我的問題。

回答

0

我在片段的WebView,我用這個代碼來檢測backpress代碼mainactivity OnbackPressed():

Fragment webview = getSupportFragmentManager().findFragmentByTag("BLOG"); 
     if (webview instanceof BlogFragment) { 
      boolean goback = ((BlogFragment) webview).canGoBack(); 
      if (!goback) { 


      } else { 
       ((BlogFragment) webview).goBack(); 
      } 

     } 

確保你開始片段,如:

getSupportFragmentManager() 
          .beginTransaction() 
          .addToBackStack(null) 
          .replace(R.id.frame_content, new BlogFragment(), "BLOG") 
          .commit(); 
0

要活動開片段。

Fragment fragment = Fragment.newInstance(); 
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.setCustomAnimations(R.anim.fragment_slide_left_enter, 
     R.anim.fragment_slide_left_exit, R.anim.fragment_slide_right_enter, 
     R.anim.fragment_slide_right_exit); 
     addFragmentToActivity(fragmentTransaction, Fragment, R.id 
     .content_frame); 


public void addFragmentToActivity(@NonNull FragmentTransaction transaction, 
             @NonNull Fragment fragment, int frameId) { 
    transaction.addToBackStack(fragment.getClass().getName()); 
    transaction.add(frameId, fragment, fragment.getClass().getName()); 
    transaction.commit(); 
} 

這就是我從HomeActivity中添加片段和在HomeActivity中調用OnBackPressed的方法。

@Override 
public void onBackPressed() { 

    if (getSupportFragmentManager().getBackStackEntryCount() > 1) { 

      getSupportFragmentManager().popBackStackImmediate(); 

} 
0

當Activity的onBackPressed()方法中的任何片斷按下後退按鈕時,您可以獲取事件。 假設您已經從HomeFragment中按下,那麼您可以在Activity中獲得onBackPressed,如下所示:

@Override 
public void onBackPressed() { 
HomeFragment fragment = (Fragment)findFragmentById(// fragment id); 
if(fragment!=null && fragment.isVisible()){ 
    // Here you can code for Home Fragment's onBackPress() 
    } 
    super.onBackPressed(); 
}