2017-05-11 5 views
0

This is my gif of problem. 내비게이션 서랍을 사용 중이며 아래 코드와 같이 일부 코드를 작성했지만 창 닫기 및 열기가 원활하게 수행 할 수 없습니다.내비게이션 서랍 열기 창 닫기가 부드럽게 작동하지 않음

public class SettingFlyout extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 


    SharedPreferences pref; 
    SharedPreferences.Editor editor; 

    public DrawerLayout drawer; 
    public ActionBarDrawerToggle toggle; 
    public NavigationView navigationView; 
    LinearLayout viewPager; 
    int roleId; 

    FragmentStack fragmentStack = FragmentStack.getInstance(); 

    @Override 
    public void onPanelClosed(int featureId, Menu menu) { 
     super.onPanelClosed(featureId, menu); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_setting_flyout); 

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

     TextView credits, num_credits, ttlscore, num_ttlscore, tutorNow; 

     final Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/GothamBookRegular.ttf"); 

     View v = getLayoutInflater().inflate(R.layout.student_actionbar_view, null); 
     credits = (TextView) v.findViewById(R.id.credits); 
     credits.setTypeface(typeface); 


     viewPager = (LinearLayout) findViewById(R.id.viewpager); 

     Intent i = getIntent(); 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     int status = i.getIntExtra("status", 1); 
     String username = i.getStringExtra("username"); 


     navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     navigationView.setItemIconTintList(null); 

     View view = navigationView.getHeaderView(0); 
     TextView TVuserName = (TextView) view.findViewById(R.id.personTextsettingflyout); 
     TVuserName.setText(username); 

     if (status == 0) { 

      roleId = Integer.parseInt(i.getStringExtra("roleId")); 
     } 


     drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 


     Tablayout_with_viewpager withViewpager = new Tablayout_with_viewpager(status, roleId); 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.replace(R.id.viewpager, withViewpager); 
     fragmentTransaction.commit(); 


    } 


    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else 

      if (fragmentStack.size()==0) { 
       super.onBackPressed(); 
       finish(); 
       moveTaskToBack(true); 
      } else if (fragmentStack.size()>0) { 

       if (fragmentStack.size()<2 || fragmentStack.size()==2 || fragmentStack.isEmpty()){ 
        super.onBackPressed(); 
        finish(); 
        moveTaskToBack(true); 
        SplashScreen splashScreen=new SplashScreen(); 
        splashScreen.onBackPressed(); 
       } else { 
         Fragment fragment = fragmentStack.pop(); 
    if (fragment.getClass().equals("")) 
        Toast.makeText(getApplicationContext(), fragment.getClass().toString(), Toast.LENGTH_SHORT).show(); 
        Toast.makeText(getApplicationContext(), String.valueOf(fragmentStack.size()), Toast.LENGTH_SHORT).show(); 

        FragmentTransaction ft = fragmentManager.beginTransaction(); 
        ft.replace(R.id.viewpager, fragment).commit(); 
       } 
      } 
    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 
     return super.onOptionsItemSelected(item); 
    } 


    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 


     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 


     Fragment fragment; 
     if (id == R.id.profile) { 
      Tablayout_with_viewpager tablayout_with_viewpager = new Tablayout_with_viewpager(); 
      fragmentTransaction.replace(R.id.viewpager, tablayout_with_viewpager).commit(); 
      // Handle the camera action 
     } else if (id == R.id.desired_tutor) { 

      DesiredTutor desiredTutor = new DesiredTutor(); 
      fragmentTransaction.replace(R.id.viewpager, desiredTutor).commit(); 

     } else if (id == R.id.payment_options) { 
      BuyCredits buyCredits=new BuyCredits(); 
      fragmentTransaction.replace(R.id.viewpager, buyCredits).commit(); 

     } else if (id == R.id.lesson_tracking) { 
      lessonTracking lessonTracking=new lessonTracking(); 
      fragmentTransaction.replace(R.id.viewpager, lessonTracking).commit(); 

     } else if (id == R.id.TTL_Score) { 
      TTL_Score ttl_score = new TTL_Score(); 
      fragmentTransaction.replace(R.id.viewpager, ttl_score).commit(); 

     } else if (id == R.id.History) { 
      History history = new History(); 
      fragmentTransaction.replace(R.id.viewpager, history).commit(); 

     } else if (id == R.id.notification) { 
      Notification notification = new Notification(); 
      fragmentTransaction.replace(R.id.viewpager, notification).commit(); 

     } else if (id == R.id.support) { 
      Support support = new Support(); 
      fragmentTransaction.replace(R.id.viewpager, support).commit(); 

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

      pref=getSharedPreferences("loginStatus", Context.MODE_PRIVATE); 
      editor=pref.edit(); 
      editor.clear(); 
      editor.apply(); 

      Intent i = new Intent(getApplicationContext(), Login.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(i); 
      finish(); 

     } 
     else if (id== R.id.daily_game){ 
      TutorGuides dailyGame= new TutorGuides(); 
      fragmentTransaction.replace(R.id.viewpager, dailyGame).commit(); 

     } 

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

무엇을 어떻게해야이 부드럽게 만들기 :

이 내 코드?

답변

0

그 때마다 한 번 한 번에 정의이 코드를 사용할 필요가 없습니다 코드 사용 때마다 : -

fragmentTransaction.replace(R.id.viewpager, desiredTutor).commit(); 

이 방법을 만들기를 -

public static void showFragment(Fragment fragment, String Tag) { 
    FragmentManager manager = activity.getSupportFragmentManager(); 
    FragmentTransaction transcation = manager.beginTransaction(); 
    transcation.replace(R.id.viewpager, fragment, Tag); 
    transcation.addToBackStack(Tag); 
    transcation.commit(); 

} 

및이를 사용 : -

switch (item.getItemId()) 
    { 
    case R.id.desired_tutor: 
    showFragment(new DesiredTutor(), ""); 
    break; 
    case R.id.payment_options: 
    showFragment(new BuyCredits(), ""); 
    break; 
    } 
+0

남자 ... 고맙습니다. –

0
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 

매번 시작합니다. 그것의 잘못. 한 번만 초기화하고 해당 객체를 사용하여 서랍을 열고 닫습니다. 선택한 리스너에서 해당 코드를 제거하고 Oncreate에 넣어 한 번 초기화하십시오. 코드 아래

사용은 완벽 만들려면 :

@Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     toggle.syncState(); 
    } 


ActionBarDrawerToggle toggle; 

toggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) { 
       @Override 
       public void onDrawerOpened(View drawerView) { 
        super.onDrawerOpened(drawerView); 
        invalidateOptionsMenu(); 
       } 

       @Override 
       public void onDrawerClosed(View drawerView) { 
        super.onDrawerClosed(drawerView); 
        invalidateOptionsMenu(); 
       } 
      }; 


mDrawerLayout.setDrawerListener(toggle); 
+0

고마워요 남자 ... 내가 제안에 따라 코드를했는데 어떻게 서랍 개체로 열기 및 닫기 이벤트를 처리 할 수 ​​있습니까 ??? –

+0

Upvote가 도움이된다면. –

+0

미안하지만 여전히 부드러움과 함께 움직이지 않습니다 .... –