Я загружаю несколько видео на сервер через 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>