在RecylerView上设置进度条,并在加载数据后删除

时间:2015-03-02 21:31:34

标签: android android-layout

我希望有一个加载图标显示在RecyclerView的顶部,并在数据加载完成后消失

看起来像是:

enter image description here

任何人都可以帮助我吗?

我的代码显示在RecyclerView上方显示“正在加载...”的TextView,并在加载数据后消失,但RecyclerView仍然可见。

我的XML:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/loaderTV"
    android:text="Loading..."
    android:layout_above="@+id/eventListRV"/>

<android.support.v7.widget.RecyclerView
    android:scrollbars="vertical"
    android:id="@+id/eventListRV"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/spinner">



    </android.support.v7.widget.RecyclerView>

然后在我的代码中

client.listCreators(request, new Callback<ServiceResponse<Event>>() {
            @Override
            public void success(ServiceResponse<Event> eventServiceResponse, Response response) {
                eventList.addAll(eventServiceResponse.data.results);
                Log.i("tag", String.valueOf(eventServiceResponse.data.total));

                if (eventList.size() > 60) {
                    adapter.notifyDataSetChanged();
                    loadingText.setVisibility(View.GONE);
                }
            }

但是我希望在加载数据时看看RecyclerView是不可见的,我想在RecyclerView所在的进度条上面,我不希望它成为textview

5 个答案:

答案 0 :(得分:14)

  1. 将您的RecyclerView和加载布局(或TextView)包装在FrameLayout中。然后将宽度和高度设置为match_parent
  2. 在您的活动的onCreate()或片段的onCreateView()中隐藏RecyclerView:recyclerView.setVisibility(View.GONE);
  3. 在您的回调方法中,使用setVisibility(View.GONE)隐藏加载布局,使用setVisibility(View.VISIBLE)显示您的RecyclerView并使用adapter.notifyDataSetChanged()
  4. 触发重新加载适配器

答案 1 :(得分:1)

对于进度条使用中心用户

android:layout_centerVertical="true"
android:layout_centerHorizontal="true"

答案 2 :(得分:1)

为了缩小进度条大小,您可以使用scaleX和scaleY,并调整较小尺寸的值。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/frameLayout">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <ProgressBar
        android:id="@+id/progressBar"
        android:visibility="visible"
        android:scaleX="0.10"
        android:scaleY="0.10"
        android:textColor="@color/colorAccent"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_gravity="center"/>
</FrameLayout>

答案 3 :(得分:1)

回收者视图。

  1. 使用RelativeLayoutProgressBarandroid:layout_centerInParent="true"一起准备。

    <ProgressBar
        android:id="@+id/progressbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />
    
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    

  2. MainViewAdapter extends RecyclerView.Adapter<MainViewAdapter.MyViewHolder>

onBindViewHolder

 @Override
 public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
 MainItem mainItem = mainItemList.get(position);
 holder.getTextViewTitle().setText(mainItem.getNameMain());

 //all your code here...

 //After that display progressbar at the below
 progressBar.setVisibility(View.GONE);
 }

答案 4 :(得分:1)

创建自定义进度对话框布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center"
android:layout_width="match_parent" android:layout_height="match_parent">

<LinearLayout
    android:layout_width="wrap_content"
    android:gravity="center"
    android:padding="3dp"
    android:background="@drawable/dialog_background"
    android:layout_height="wrap_content">

    <ProgressBar
        android:padding="3dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

</RelativeLayout>

在Drawable中创建自定义背景

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@android:color/white"/>
<size android:height="60dp" android:width="60dp"/>
</shape>

用Java创建ProgressDialog

public static ProgressDialog mProgressDialog;

定义属性并在创建时显示

        mProgressDialog = new ProgressDialog(CategoryActivity.this);
        mProgressDialog.setCancelable(false);
        mProgressDialog.show();
        mProgressDialog.setContentView(R.layout.custom_dailog);
        mProgressDialog.getWindow().setBackgroundDrawableResource(
                android.R.color.transparent
        );

致电ProgressDialog在此处关闭

     @Override
 public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
 MainItem mainItem = mainItemList.get(position);
 holder.getTextViewTitle().setText(mainItem.getNameMain());

 //all your code here...

 //at end of onBindViewHolder dimiss this
 CategoryActivity.mProgressDialog.dismiss();
 }

将显示进度对话框,直到将项目加载到recyclerview中,并且在加载项目后将其关闭