导航抽屉打开关闭窗格无法使用平滑度

时间:2017-05-11 06:37:10

标签: android navigation-drawer

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

我该怎么做才能让它更顺畅?

2 个答案:

答案 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);

答案 1 :(得分: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;
  }