2016-09-09 2 views
-1

내 qeustion에 시간을내어 주셔서 감사합니다. 내 애플 리케이션에서 안드로이드 스튜디오 탐색 서랍 템플릿을 사용하고 있습니다. 그러나 문제는 전화를 돌릴 때 이전 조각의 레이아웃이 현재 조각 위에 표시된다는 것입니다. 당신이 장치를 회전 할 때기타 조각은 안드로이드 스튜디오 탐색 서랍 템플릿을 사용하여 회전시 현재 조각 변경 사항 위에 표시됩니다.

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

}

+0

활동 클래스, 조각 및 서랍 코드를 추가하십시오. 그들이 코드를 보지 않으면 아무도 도울 수 없다. – SaNtoRiaN

답변

0

는 활동은 현재 상태를 저장하고 파괴 즉 onCreate()가 다시 호출 다시 생성 한 후 현재의 단편을 유지합니다. 파편이 파괴되기 전에 하나의 조각을 가지고 있었고 이제는 onCreate()에 대한 새로운 호출에서 다른 조각을 추가 했으므로 조각이 2 개있는 것입니다. 이 문제를 해결하려면 onCreate()savedInstanceState 매개 변수가 null인지 먼저 확인해야합니다. 즉, 순환 변경 등으로 인해 다시 시작되는 것이 아니라 처음으로 활동을 작성한 후 활동을 호출 할 때마다 추가하는 대신 조각을 추가할지 결정하십시오. onCreate()

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(); 
} 
+0

현재 활동을 보여주는 "else"조건에 무엇을 넣어야합니까? @SaNtoRiaN –

+0

아무 것도 없으면 원하는 것을 삭제할 수 있습니다. 방금 요점을 보여주기 위해 추가했습니다. 나는 대답을 편집했다 – SaNtoRiaN

+0

나에게 당신의 소중한 시간을 보내 주신 @SaNtoRiaN에게 감사드립니다. –

관련 문제