2016-03-22 31 views
0

Android'de tamamen yeniyim. Android Studio'nun fragmanlar arasında gezinmek için bir şablonu olmadığı konusunda oldukça şaşırdım. Birkaç günümde harcadım ama yine de kodumu düzgün bir şekilde çalıştıramıyor. Tek etkinliğim ve iki parçam var - MainFragment ve AboutFragment. Hakkında çekmece menü öğesi üzerinden erişilebilir. Geri hareket çubuğu düğmesine basarak MainFragment'e dönmek istiyorum. Sorun düğme çalışmıyor. Biri bana yardım edebilir mi?Android parçaları yığını - geri (yukarı) düğmesi çalışmıyor

Komple Minimal Android Studio projesi: test.zip

İşte benim etkinlik sınıftır:

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, 
    MainFragment.OnFragmentInteractionListener, AboutFragment.OnFragmentInteractionListener { 

private DrawerLayout drawer; 
private boolean zOrderSet = false; 
private ActionBarDrawerToggle toggleListener; 

private FragmentManager.OnBackStackChangedListener mOnBackStackChangedListener = 
     new FragmentManager.OnBackStackChangedListener() { 
    @Override 
    public void onBackStackChanged() { 
     syncActionBarArrowState(); 
    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    toggleListener = new ActionBarDrawerToggle(this, drawer, toolbar, 
      R.string.navigation_drawer_open, R.string.navigation_drawer_close) { 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
      if (!zOrderSet) { 
       drawer.bringChildToFront(drawerView); 
       drawer.requestLayout(); 
       drawer.invalidate(); 
       zOrderSet = true; 
      } 
     } 

     public void onDrawerClosed(View view) { 
      syncActionBarArrowState(); 
     } 

     public void onDrawerOpened(View drawerView) { 
      toggleListener.setDrawerIndicatorEnabled(true); 
     } 

    }; 
    drawer.setDrawerListener(toggleListener); 
    toggleListener.syncState(); 
    getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener); 


    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
    getSupportFragmentManager().beginTransaction().replace(R.id.flContent, MainFragment.newInstance("", "")).commit(); 
} 

@Override 
protected void onDestroy() { 
    getSupportFragmentManager().removeOnBackStackChangedListener(mOnBackStackChangedListener); 
    super.onDestroy(); 
} 

private void syncActionBarArrowState() { 
    boolean empty = getSupportFragmentManager().getBackStackEntryCount() == 0; 
    toggleListener.setDrawerIndicatorEnabled(empty); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(!empty); 
} 

@Override 
public void onBackPressed() { 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (toggleListener.isDrawerIndicatorEnabled() && toggleListener.onOptionsItemSelected(item)) { 
     return true; 
    } 

    int id = item.getItemId(); 
    if (id == android.R.id.home && getSupportFragmentManager().popBackStackImmediate()) { 
     return true; 
    } 

    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    FragmentTransaction ta = getSupportFragmentManager().beginTransaction(); 
    try { 
     switch (item.getItemId()) { 
      case R.id.nav_restart: 
       ta.replace(R.id.flContent, MainFragment.class.newInstance()); 
       break; 
      case R.id.nav_about: 
       ta.replace(R.id.flContent, AboutFragment.class.newInstance()).addToBackStack(null); 
       break; 
      default: 
       return false; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     ta.commit(); 
    } 

    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

@Override 
public void onFragmentInteraction(Uri uri) { 

} 

}

+0

Sen yerine kullanabilir ve hala yığın geçmişini geri koruyabilirsiniz. Aksini gösteren bir şey okudun mu? –

+0

@Doug Teşekkürler, bunu bilecek. Ama bu sorunu çözmez - eylem çubuğunu tıklattığımda onOptionsItemSelected() çağrılmıyor Geri düğmesi – brox

cevap

0
@Override 
public void onBackPressed(){ 
getActivity().getFragmentManager().beginTransaction().remove(this).commit(); 
} 
+1

Açıklar * bu kodun nasıl yardımcı olacağı açıklanır? Sadece bir kod dökümü koymak, gelecekte insanlara gerçekten yardımcı olmaz. –

İlgili konular