私は、RecyclerビューのサイドでWeb Viewを使用してビデオを再生していますが、破壊された...音がまだバックグラウンドで再生している...Recycler内部のWebview PlayVideoを再生してもサウンドが再生されています。フラグメントが破棄されても再生されていません。
public class PageVideoAdapter extends
RecyclerView.Adapter<PageVideoAdapter.MyViewHolder>
{
EventPage activity;
ArrayList<PageVideoModel> list = new ArrayList<>();
DisplayMetrics metrics;
public PageVideoAdapter(EventPage activity, ArrayList<PageVideoModel> list)
{
this.activity = activity;
this.list = list;
metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_video_adapter, parent, false);
return new MyViewHolder(rootView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.titlePageVideoAdapter.setText(list.get(position).getTitle());
holder.web.loadUrl(list.get(position).getVideo_url());
ImageLoader.getInstance().loadImage(list.get(position).getImage_url(),
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
holder.imgPageVideoAdapter.setImageBitmap(bitmap);
}
@Override
public void onLoadingCancelled(String s, View view) {
}
});
holder.imgPageVideoAdapter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.get(holder.getAdapterPosition()).setOpen(true);
notifyDataSetChanged();
}
});
if (list.get(position).isOpen == true) {
holder.imgPageVideoAdapter.setVisibility(View.GONE);
} else {
holder.imgPageVideoAdapter.setVisibility(View.VISIBLE);
}
}
public void clearData() {
list.clear();
notifyDataSetChanged();
}
public void addAll(ArrayList<PageVideoModel> list) {
this.list.addAll(list);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
@InjectView(R.id.title_PageVideoAdapter)
TextView titlePageVideoAdapter;
@InjectView(R.id.img_PageVideoAdapter)
ImageView imgPageVideoAdapter;
@InjectView(R.id.fl_PageVideoAdapter)
FrameLayout flPageVideoAdapter;
@InjectView(R.id.web)
WebView web;
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
public MyViewHolder(View itemView) {
super(itemView);
ButterKnife.inject(this, itemView);
titlePageVideoAdapter.setTypeface(AppClass.typeface_roboto_regular);
LinearLayout.LayoutParams layoutParamsOne = new LinearLayout.LayoutParams(metrics.widthPixels, (metrics.heightPixels * 340)/800);
flPageVideoAdapter.setLayoutParams(layoutParamsOne);
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setDomStorageEnabled(true);
web.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
if (web != null) {
web.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)");
}
super.onPageFinished(view, url);
}
});
web.addJavascriptInterface(this, "MyApp");
}
@JavascriptInterface
public void resize(final float height) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
web.setLayoutParams(new FrameLayout.LayoutParams(activity.getResources().getDisplayMetrics().widthPixels, (int) (height * activity.getResources().getDisplayMetrics().density)));
}
});
}
}
}
あなたが任意のサンプルコードを更新することができます...質問はっきりしていますが、私たちがあなたのコードを見ればそれを解決することができます...問題のあなたのコードを更新してください – MLN
ここに私のアダプタクラスです... –
私はRecyclerviewを次のようにして解決しました:onDestroyViewフラグメントのメソッド –