关闭NavigationDrawer并在获取数据时显示加载

时间:2017-10-12 13:09:12

标签: java android

我目前有一个导航抽屉,其中每个选项都会调用服务器来获取数据。这是通过我创建的类来完成的,它接收作为字符串的调用类型并在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;
}

2 个答案:

答案 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
}     

点击此处了解有关AsynkTaskthis

的更多信息