我最近读过Java的Observable类.我不明白的是:在通知观察者之前(notifyObservers())我必须调用setChanged().notifyObservers方法中有一个布尔值,要求我们调用setChanged.布尔值的目的是什么?为什么我必须调用setChanged()?
根据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循环,我怎样才能达到这个效果?
java multithreading android android-fragments navigation-drawer