其他片段在使用android studio导航抽屉模板旋转时的当前片段更改上方查看

其他片段在使用android studio导航抽屉模板旋转时的当前片段更改上方查看,android,navigation-drawer,android-studio-2.0,Android,Navigation Drawer,Android Studio 2.0,谢谢你花时间听我讲课。在我的应用程序中,我使用的是android studio导航抽屉模板。 但问题是,当我旋转手机时,前面片段的布局显示在当前片段的上方 public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { @Override protected void onCreate(Bundle s

谢谢你花时间听我讲课。在我的应用程序中,我使用的是android studio导航抽屉模板。 但问题是,当我旋转手机时,前面片段的布局显示在当前片段的上方

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

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

        Fragment fragment = null;
        Class fragmentClass = null;


       /* if (savedInstanceState == null){
            try{
                fragment = (Fragment) fragmentClass.newInstance();
            }catch (Exception e){
                e.printStackTrace();
            }
        }*/
        fragment = new Login();
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.add(R.id.fragment, fragment);
        fragmentTransaction.commit();




        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

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

    @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.main, 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_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

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

        // Handle navigation view item clicks here.
        int id = item.getItemId();
        Fragment fragment =null ;
        Class fragmentClas = null;

        if (id == R.id.nav_camera) {
            // Handle the camera action
            fragment = new Attendance();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.fragment, fragment);
            fragmentTransaction.commit();
        } else if (id == R.id.nav_gallery) {

            fragment = new AddStudent();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.fragment, fragment);
            fragmentTransaction.commit();
        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

       /* FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();*/

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

}

旋转设备时,“活动”将保存其当前状态并保留当前片段,然后销毁并重新创建该片段,即再次调用
onCreate()。在销毁之前您有一个片段,现在它在对
onCreate()
的新调用中添加了另一个片段,这就是为什么您有两个片段。要解决此问题,您应该首先检查
onCreate()
中的
savedInstanceState
参数是否为空,即这是活动的首次创建,而不仅仅是由于旋转更改或其他原因而重新启动,然后决定是否添加片段,而不是在活动调用
onCreate()


添加活动类、片段和抽屉代码。我想如果他们看不到代码,没人能帮上忙。你能告诉我,我应该在显示当前活动的“else”条件下加什么吗@SaNtoRiaNNothing,你可以删除else,如果你想的话,我只是添加了它来说明这一点。我编辑了答案谢谢你@SaNtoRiaN为我花费了宝贵的时间。
if(savedInstanceState == null) {
    // Add the fragment because it's normal creation
    fragment = new Login();
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.fragment, fragment);
    fragmentTransaction.commit();
}