简体   繁体   English

android导航抽屉,在片段之间切换

[英]android Navigation-drawer ,switching between fragment

When i switch between fragments in Navigation-drawer , Navigation-drawer closes slowly , i assume it waits to replace the newly selected fragment and closes the drawer, 当我在Navigation-Drawer中的片段之间切换时, Navigation-Drawer会缓慢关闭,我认为它正在等待替换新选择的片段并关闭抽屉,

How can i speed up it? 我如何加快速度? In Gmail app, when you select a tab in Navigation-drawer ,the new fragment is not created immediately,instead it shows a ProgressBar ,then content is load,Also Navigation-drawer closing is speed here. Gmail应用程序中,当您在Navigation-drawer中选择一个选项卡时,不会立即创建新片段,而是显示ProgressBar ,然后加载内容,并且在这里关闭Navigation-抽屉也很方便。

How can i do it, Any code example is appreciated. 我该怎么做,任何代码示例表示赞赏。

Edit 编辑

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

    navigationDrawerTitles = getResources().getStringArray(R.array.navigation_drawer_titles);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.drawer_list_item, navigationDrawerTitles));
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    .......

}

private class DrawerItemClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        selectItem(position);
    }
}

private void selectItem(int position) {
    switch(position){
    case 0:
        getFragmentManager().beginTransaction()
                .replace(R.id.content_frame, new HomeFragment(), "HomeFragment").commit();
        mDrawerList.setItemChecked(position, true);
        setTitle(navigationDrawerTitles[position]);
        break;
    case 1:
        getFragmentManager().beginTransaction()
                .replace(R.id.content_frame, new HistoryFragment(), "HistoryFragment").commit();
        mDrawerList.setItemChecked(position, true);
        setTitle(navigationDrawerTitles[position]);
        break;
    case 2:
        Intent sintent = new Intent(MainActivity.this,
                SettingsActivity.class);
        startActivity(sintent);
        break;
    default:
        break;

    }
    mDrawerLayout.closeDrawer(mDrawerList);

}

Thanks, 谢谢,

I think this link will help you: Speed up Android Navigation drawer 我认为此链接将为您提供帮助: 加快Android导航抽屉的速度

public boolean smoothSlideViewTo(... int duration) {
    ...
    return forceSettleCapturedViewAt(... int duration);
}

You have to close drawer when you replace fragment like this: 当您替换片段时,您必须关闭抽屉:

if (drawerLayout.isDrawerOpen(Gravity.START)) {
    drawerLayout.closeDrawers();
}else{
   drawerLayout.openDrawer(Gravity.START);
}

// your code to replace or add fragment //您的代码以替换或添加片段

NOTE:- Change Gravity.START to Gravity.END if your drawer is open from right side. 注意:-如果您的抽屉从右侧打开,请更改Gravity.START到Gravity.END。 first close drawer and then replace fragment 首先关闭抽屉,然后更换碎片

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

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