繁体   English   中英

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

[英]Navigation Drawer open close pane not working with smoothness

这是我的问题 我正在使用导航抽屉,并且按照下面的步骤完成了一些代码,但是关闭和打开窗格无法正常工作。

这是我的代码:

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

我应该怎么做才能使其更流畅?

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

每次使用此代码时,不必每次都使用一次定义此代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM