在使用空的while循环初始化片段之前等待导航抽屉关闭

iam*_*tar 5 java multithreading android android-fragments navigation-drawer

根据DrawerLayout文档,"避免在动画期间执行昂贵的操作,例如布局,因为它可能导致卡顿".

因此,我试着在继续之前等待抽屉关闭:

@Override public void onItemClick(AdapterView parent
                                , View view
                                , int position
                                , long id) {
    // Close the drawer
    mDrawerLayout.closeDrawer(mDrawerList);

    ExecutorService es = Executors.newSingleThreadExecutor();
    final int mPosition = position;
    Thread navThread = new Thread(new Runnable() {
        @Override public void run() {

            // Wait for the drawer to close
            while (mDrawerLayout.isDrawerOpen(mDrawerList));

            // Initialize the Fragments.
            runOnUiThread(new Runnable() {
                @Override public void run() {
                    selectNavigationItem(mPosition);
                }
            });
        }
    });
    es.submit(navThread);
    es.shutdown();
}
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但Lint警告我关于空循环.如果没有空的while循环,我怎样才能达到这个效果?

iam*_*tar 6

ListView.OnItemClickListener:

@Override public void onItemClick(AdapterView parent
                            , View view
                            , int position
                            , long id) {
    mPosition = position;
    mNavigationItemClicked = true;
    mDrawerLayout.closeDrawer(mDrawerList); 
}
Run Code Online (Sandbox Code Playgroud)

DrawerLayout:

public void onDrawerClosed(View view) {
    getSupportActionBar().setTitle(mTitle);
    if (mNavigationItemClicked)
        selectNavigationItem();
    mNavigationItemClicked = false;
}
Run Code Online (Sandbox Code Playgroud)

selectNavigationItem():

switch (mPosition) {
    ...
}
Run Code Online (Sandbox Code Playgroud)