我目前有一个导航抽屉,其中每个选项都会调用服务器来获取数据。这是通过我创建的类来完成的,它接收作为字符串的调用类型并在AsyncTask中发出请求,返回检索到的数据。
我面临的问题是,由于延迟导航抽屉在执行请求和解析数据时保持打开状态,这会让用户误以为它崩溃了。
我希望它关闭并显示ProgressDialog,而操作不会芬兰语。我目前的代码不起作用,任何想法为什么?提前致谢
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
this.mDrawer.closeDrawer(GravityCompat.START);
this.mDialog.show();
if (id == R.id.nav_data) {
this.dataList = this.myGetterClass.getRequests("some/API/route");
try {
if (this.dataList.size() == 0) {
setTitle("There's no data");
} else {
setTitle("Here's the data");
}
} catch (Exception e) {
setTitle("Without data");
Toast error = Toast.makeText(getApplicationContext(), "Something went wrong", Toast.LENGTH_LONG);
error.show();
}
}
updateScreen(this.dataList);
this.mDialog.dismiss();
return true;
}
答案 0 :(得分:2)
关闭这对我有用的navigationDrawer
drawerLayout.closeDrawer(Gravity.START);
drawerToggle.syncState();
要显示ProgressBar,您可以在xml文件中定义它,然后在需要时显示和隐藏它
答案 1 :(得分:2)
要关闭抽屉,您需要更换
mDrawer.closeDrawer(GravityCompat.START);
与
mDrawerLayout.openDrawer(Gravity.LEFT);
//从抽屉打开的抽屉重力
要显示进度对话框,最好的方法是在asynktask
中放入进度if (id == R.id.nav_data) {
//call asynk task for getting server data
}else if(id == R.id.nav_data1){
//call asynk task for getting server data
}
的更多信息