Скрытие индикатора выполнения на элементе recyclerView после завершения загрузки нескольких носителей - PullRequest
0 голосов
/ 21 сентября 2018

Я загружаю несколько видео на сервер через API.

Поскольку индикатор выполнения настроен на отображение в XML, он всегда отображается даже после успешной загрузки.

Iполучать ответ после каждой успешной загрузки файла с сервера во фрагменте. Но мой индикатор выполнения объявляется в пользовательском макете класса адаптера.

Как скрыть индикатор выполнения каждого конкретного элемента только после негобыл успешно загружен?

Вот мой класс Fragment ниже:

 private void uploadVideo(List<String> videoPathList) {
        VideoUrl mVideoUrl = null;
        String reqId = String.valueOf(dbHelper.getRequestId());
        String userId = String.valueOf(dbHelper.getUserId());
        for (int j = 0; j < videoPathList.size(); j++) {
            String fullUrl = videoPathList.get(j);
            int fullLength = fullUrl.length();
            int lastIndex = fullUrl.lastIndexOf("/");
            mVideoUrl = new VideoUrl();
            mVideoUrl.setVideoUrl("/Uploads" + fullUrl.substring(lastIndex, fullLength));
// mVideoUrl.setVideoUrl(videoPathList.get(j));
//VideoUrl videoUrl = new VideoUrl("/Uploads/feedback_09132018023251PM.mp4");
            videoUrlList.add(mVideoUrl);
        }


        mVideoAdapter.notifyDataSetChanged();

        for (int i = 0; i < videoPathList.size(); i++) {
            vidPath = videoPathList.get(i);
            Log.d("Log", "filePath: " + vidPath);

            SimpleMultiPartRequest smpr = new SimpleMultiPartRequest(Request.Method.POST, videoUploadUrl,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            try {
                                JSONArray jsonArray = new JSONArray(response);
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    String url = jsonArray.getJSONObject(i).getString("Url");

                                    Log.d("Log", "response video: " + response);

                                    Toast.makeText(getActivity(), url, Toast.LENGTH_SHORT).show();

                                }

                                mVideoAdapter.notifyDataSetChanged();

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.d("Log", "video response error: " + error);
                            Toast.makeText(getActivity(), "Uploading error", Toast.LENGTH_SHORT).show();

                        }
                    });

            smpr.addStringParam("Userid", userId);
            smpr.addStringParam("RequestId", String.valueOf(2));
            smpr.addStringParam("ContentType", "2");
            smpr.addFile("File", vidPath);
            Log.d("Log", "filePath smpr: " + vidPath);

            RequestQueue mRequestQue = Volley.newRequestQueue(getActivity());
            mRequestQue.getCache().invalidate(videoUploadUrl, true);
            mRequestQue.add(smpr);
        }

    }

И метод моего класса адаптера 'onBindViewHolder:

public class videoViewHolder extends RecyclerView.ViewHolder{
        private ImageView videoThumb,removeItem;
        private ProgressBar pBar;

            public videoViewHolder(View view) {
                super(view);

                videoThumb = (ImageView) view.findViewById(R.id.video_view);
                pBar = (ProgressBar) view.findViewById(R.id.progress_upload);
                removeItem = (ImageView) view.findViewById(R.id.remove_item_video);

            }
    }

        @Override
        public void onBindViewHolder(final videoAdapter.videoViewHolder holder, final int position) {
            if (getItemViewType(position) == TYPE_LAYOUT_UPLOAD) {
                uploadViewHolder upHolder = (uploadViewHolder) holder;
                upHolder.uploadVideo.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        uploadVideoActivity.onUploadActivity();
                    }
                });

            } else {
                final VideoUrl videoUrlList = videoList.get(position - 1);
                String videoPath = videoUrlList.getVideoUrl();
                int userType = videoUrlList.getUserType();
                try {
    //bMap = retriveVideoFrameFromVideo("http://api.ims.celeps.co.ao"+videoPath);
                    bMap = retriveVideoFrameFromVideo(videoPath);
                } catch (Throwable throwable) {
                    throwable.printStackTrace();
                }

                if (userType == 1) {
                    holder.removeItem.setVisibility(View.INVISIBLE);
                } else {
                    holder.removeItem.setVisibility(View.VISIBLE);
                }


                    Glide.with(mContext).
                            load(videoUrlList.getVideoUrl()).
                            thumbnail(0.1f).
                            into(holder.videoThumb);



                holder.videoThumb.setOnClickListener(new videoClickListener(position));

                holder.removeItem.setOnClickListener(new removeItemClickListener(position));

            }
        }

Мой xml-файл:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="180dp"
        app:cardUseCompatPadding="true"
        android:layout_margin="1dp"
        android:background="@drawable/media_item_border"
        app:cardPreventCornerOverlap="true"
        app:cardElevation="2dp">
        <ImageView
            android:id="@+id/video_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <ProgressBar
            android:id="@+id/progress_upload"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:visibility="visible"
            style="@android:style/Widget.ProgressBar.Small.Inverse"
            android:indeterminate="true"
            android:layout_width="50dp"
            android:layout_height="50dp" />
        <ImageView
            android:id="@+id/remove_item_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_alignRight="@+id/imgV_thumbnail"
            android:layout_alignTop="@+id/imgV_thumbnail"
            android:layout_margin="10dp"
            android:padding="10dp"
            android:background="@drawable/remove_icon_rounded_bg"
            android:scaleType="centerInside"
            android:src="@drawable/ic_cancel_icon" />

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

</RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Сделайте это, чтобы скрыть ваш индикатор выполнения

Объявите логический Vriable глобально

public class CustomAdapter extends.......{
    boolean isHide = false
}

И в вашем OnBindView Сделайте это:

if(isHide){
    holder.progessbar.setVisiblity(View.INVISIBLE)

}

Теперь создайте метод в адаптере

public void hideProgressBar(){
    // here set as true
    isHide = true;
    notifyDataSetChanged();

}

В своем фрагменте Сделайте это

CompanyAdapter  adapter = (CompanyAdapter) companyAdapter;
adapter.hideProgressBar();
0 голосов
/ 21 сентября 2018

Вы можете создать функцию в своем адаптере, которая скрывает панель progres, и вызывать ее для метода ответа во фрагменте.

...