Круговой индикатор выполнения, чтобы показать прогресс RecyclerView - PullRequest
1 голос
/ 24 апреля 2020

Я создал домашний экран для своего приложения, и он состоит из 3 горизонтальных элементов RecyclerVIews:

enter image description here

Все три созданы в таким же образом, используя это:

public class DiscoverItemAdapter extends RecyclerView.Adapter<DiscoverItemAdapter.DiscoverItemsViewHolder> {

    private List<DiscoverItems> discoverItems;

    interface OnDiscoverItemClickListener {
        void onClick(DiscoverItems discoverItems);
    }

    private OnDiscoverItemClickListener listener;

    public DiscoverItemAdapter(List<DiscoverItems> discoverItems, OnDiscoverItemClickListener listener) {
        this.discoverItems = discoverItems;
        this.listener = listener;
    }

    @Override
    public DiscoverItemsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_Item_discover, parent, false);
        return new DiscoverItemsViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DiscoverItemsViewHolder holder, int position) {
        holder.bind(discoverItems.get(position));
    }

    @Override
    public int getItemCount() {
        return discoverItems.size();
    }

    class DiscoverItemsViewHolder extends RecyclerView.ViewHolder {

        TextView ItemName;
        ImageView ItemCover;
        DiscoverItems discoverItems;

        private DiscoverItemsViewHolder(View itemView) {
            super(itemView);
            ItemName = itemView.findViewById(R.id.tv_ItemName);
            ItemCover = itemView.findViewById( R.id.iv_ItemCover );
            itemView.setOnClickListener( v -> listener.onClick(discoverItems) );

        }

        private void bind(DiscoverItems discoverItems) {
            this.discoverItems = discoverItems;
            String ItemID = discoverItems.getItemID();

            MyItemClient client = new MyItemClient();
            client.getItems(ItemID, new JsonHttpResponseHandler(){
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject response){
                    if(response!=null){
                        final MyItem Items = MyItem.fromJson(response);

                        ItemName.setText( Items.getTitle() );
                        Picasso.with(itemView.getContext()).load( Uri.parse(Items.getCoverUrl())).into(ItemCover);
                    }
                }
            });

        }
    }


}

Я хотел бы показать круговую ProgressBar в центре экрана, пока все RecyclerViews не заполнятся элементами.

Я попытался использовать

pb_Discover.setVisibility( View.VISIBLE );
----CALLING THE RECYCLERVIEW-----
pb_Discover.setVisibility( View.GONE);

Однако он устанавливает видимость на GONE сразу после завершения вызова, даже если RecyclerView еще не заполнен.

Где можно разместить строку pb_Discover.setVisibility( View.GONE);, поэтому он действительно исчезнет только после заполнения всех RecyclerViews?

Решение :

Мне удалось решить эту проблему, добавив:

rv_PopularItems.getViewTreeObserver()
        .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                flagscounter = flagscounter + 1;
                CheckViewsLoaded(flagscounter);
                rv_PopularItems.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });

Я делаю это в каждом из RecyclerViews, а затем, если flagcounter = 3, я устанавливаю Visibility на GONE

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...