【问题标题】:How to implement indeterminate loading screen如何实现不确定的加载屏幕
【发布时间】:2016-03-12 21:03:04
【问题描述】:

我正在构建一个使用 REST 接口来获取数据的应用程序。通常,我会打电话给setProgressBarIndeterminateVisibility(true); 让用户知道应用程序正在等待数据。不过,这好像是deprecated

AppCompat 中不再提供进度条。

在查看 GMail 应用程序时,我看到有一个不确定的进度条(加载图标)全屏,数据将来自哪里。

我将如何正确实现它?一些活动是从ListViewActivity 扩展而来的,并在没有可用数据时使用setEmptyView 显示一个简单的TextView。有些是更精细的布局。

我可以考虑使用setVisibility(View.GONE),但想知道这是否是“正确”的做法。

【问题讨论】:

  • @ankitaggarwal 谢谢,我也找到了那个,但它实现了操作栏中的进度条。我正在寻找一种解决方案,将加载图标放置在布局将要放置的位置。
  • 为了实现这一点,我以前做的是,我会在我的布局中放置一个进度条,它是水平居中,居中垂直于整个布局。最初它的可见性是可见的,而布局的其余部分是不可见的。加载数据后,使进度条不可见,布局可见。这只是一种解决方法,可能效率不高

标签: android progress-bar


【解决方案1】:

是的。这是正确的方法。只需在 XML 上应放置的所有内容进行布局,并在必要时在您的进度条上调用 setVisibility

通常有两种方法可以知道“何时”调用。

  1. 关于您的 REST 回调(例如 onSuccess()onStartLoading()
  2. 在您的适配器上使用 DataSetObserver(这正是 ListView 所做的)。像下面的代码:

.

@Override
protected void onStart(){
   super.onStart()
   observer.onChanged();
   adapter.registerDataSetObserver(observer);
}

@Override
protected void onStop(){
   super.onStop()
   adapter.unregisterDataSetObserver(observer);
}

private DataSetObserver observer = new DataSetObserver(){
   @Override
   public void onChanged() {
       progress.setVisibility(adapter.getCount()==0?View.VISIBLE:View.GONE);
   }
}

【讨论】:

    【解决方案2】:

    将您的内容布局包装到FrameLayout。添加到FrameLayout 类似这样的内容:

    <LinearLayout
        android:id="@+id/loading_progress"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical"
        android:visibility="invisible">
    
        <ProgressBar
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:indeterminate="true"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="Loading data..."/>
    </LinearLayout>
    

    然后使用.setVisibility(View.VISIBLE) / .setVisibility(View.INVISIBLE)在代码中切换内容/进度层

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多