如何实现不确定的加载屏幕

时间:2016-03-12 12:25:50

标签: android progress-bar

我正在构建一个使用REST接口来获取数据的应用程序。通常,我会调用setProgressBarIndeterminateVisibility(true);让用户知道应用正在等待数据。但是,这似乎是deprecated

  

AppCompat中不再提供进度条。

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

我该如何正确实现?部分活动从ListViewActivity延长,并在没有可用数据时使用setEmptyView显示简单的TextView。有些是更复杂的布局。

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

2 个答案:

答案 0 :(得分:1)

是。这是正确的方法。只需将所有内容布局在XML上,并在必要时在progressBar上调用setVisibility

通常有两种方式可以使用"当"打电话。

  1. 关于您的REST回调(例如onSuccess()onStartLoading()
  2. 在适配器上使用DataSetObserver(这正是ListView所做的)。如下代码:
  3. @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);
       }
    }
    

答案 1 :(得分:0)

将您的内容布局包装到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)

在代码中切换内容/进度图层