【问题标题】:Hiding a progressBar on a recyclerView Item after upload completion of multiple media多个媒体上传完成后在recyclerView Item上隐藏progressBar
【发布时间】:2019-02-25 12:20:24
【问题描述】:

我正在通过 API 将多个视频上传到服务器。

由于进度条在 XML 中设置为可见,因此即使在成功上传后也始终可见。

每次从服务器成功上传文件后,我都会在 Fragment 中收到响应。` 但是,我的进度条是在 Adapter 类自定义布局中声明的。

如何才能在每个特定项目上传成功后才隐藏其进度条?

下面是我的 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>

【问题讨论】:

  • 请在此处添加视图 Holder 和您的 xml
  • @FaizMir 请检查修改后的代码
  • 检查我的答案

标签: android android-volley thumbnails android-glide


【解决方案1】:

您可以在适配器中创建一个隐藏进度条的函数,并在片段中的响应方法上调用它。

【讨论】:

    【解决方案2】:

    这样做可以隐藏你的进度条

    全局声明一个布尔变量

    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();
    

    【讨论】:

    • 我的进度条在我的 ViewHolder 类中,所以我如何在 ViewHolder 类之外访问进度条
    • @SagarKharkar 查看我编辑的答案
    • 这是一种一次隐藏所有项目的所有进度条的方法。我只想隐藏收到上传响应的那个项目的进度条。
    • 为此,您必须明智地隐藏位置获取上传的位置并隐藏该位置的进度条
    • Java 代码不要使用栈 sn-ps; stack sn-ps 仅适用于在网站上可执行的 CSS、HTML 和 JavaScript
    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多