【问题标题】:Close NavigationDrawer and show loading while getting data关闭 NavigationDrawer 并在获取数据时显示加载
【发布时间】:2017-10-12 13:09:11
【问题描述】:

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

【问题讨论】:

标签: java android


【解决方案1】:

要关闭抽屉,你需要更换

 mDrawer.closeDrawer(GravityCompat.START);

mDrawerLayout.openDrawer(Gravity.LEFT); //这里是抽屉打开位置的抽屉重力

显示进度对话框的最佳方法是将进度放入 asynctask

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 的更多信息

【讨论】:

    【解决方案2】:

    关闭navigationDrawer 这对我有用

      drawerLayout.closeDrawer(Gravity.START);
      drawerToggle.syncState();
    

    要显示 ProgressBar,您可以在 xml 文件中定义它,然后在需要时显示和隐藏它

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2016-08-10
      • 2021-11-30
      • 2022-06-15
      • 2022-01-20
      • 2016-05-29
      • 2013-03-27
      • 1970-01-01
      • 2021-10-09
      相关资源
      最近更新 更多