Как добавить индикатор выполнения перед загрузкой данных из firebase и удалить этот индикатор после загрузки данных из firebase с помощью адаптера firebasercycler - PullRequest
0 голосов
/ 25 марта 2019

У меня было создано одно приложение, в этом приложении я использовал firebase и firebaserecycler адаптер.Я могу загрузить данные, все отлично работает.Но я хочу добавить прогрессбар до загрузки данных и отклонить его после загрузки данных.У кого-нибудь есть опыт с этим?

Мой фрагмент - это //

    public class CategoryFragment extends Fragment {
    View view;

    RecyclerView listCategory;
    RecyclerView.LayoutManager layoutManager;
    FirebaseRecyclerAdapter<Category, CategoryViewHolder> adapter;

    FirebaseDatabase database;
    DatabaseReference categories;

    public static CategoryFragment newInstance(){
    CategoryFragment categoryfragment = new CategoryFragment();
    return categoryfragment;
    }

    public CategoryFragment() {
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    database = FirebaseDatabase.getInstance();
    categories = database.getReference("Category");

    }


    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup 
    container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view = inflater.inflate(R.layout.fragment_category, container, 
    false);

    listCategory = view.findViewById(R.id.listCategory);
    listCategory.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(container.getContext());
    listCategory.setLayoutManager(layoutManager);

    loadCategories();

    return view;
    }

    private void loadCategories(){
    adapter =  new FirebaseRecyclerAdapter<Category, CategoryViewHolder>
       (
            Category.class,
            R.layout.category_layout,
            CategoryViewHolder.class,
            categories
       ) {
        @Override
        protected void populateViewHolder(CategoryViewHolder viewHolder, 
        final Category model, int position) {
            viewHolder.category_name.setText(model.getName());

            viewHolder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean 
         isLongClick) {
                    Intent game = new Intent(getActivity(),Start.class);
                    Common.categoryId = 
         adapter.getRef(position).getKey();
                    startActivity(game);
                }
            });
        }
       };
       adapter.notifyDataSetChanged();
       listCategory.setAdapter(adapter);
       }
       }

Мой XML-файл - это //

 <?xml version="1.0" encoding="utf-8"?>
 <FrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".CategoryFragment">

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

  </FrameLayout>

1 Ответ

2 голосов
/ 25 марта 2019

Поскольку вы используете FirebaseRecyclerAdapter, это можно решить очень просто. Создайте новый объект ProgressBar и начните показывать его в методе onCreate() или, если хотите, добавьте его непосредственно в файл .XML. Наконец, в своем классе адаптера переопределите следующий метод:

@Override
public void onDataChanged() {
    if (progressBar != null) {
        progressBar.setVisibility(View.GONE);
    }
}

P.S. Вы используете очень старую версию библиотеки Firebase-UI . Пожалуйста, обновитесь до последней версии.

...