2017-05-04 94 views
1

我使用的Web视图侧边Recycler视图播放视频,但问题是我不知道如何停止片段上的视频摧毁了声在后台还在玩......请帮助Webview里面的RecyclerVIew播放视频但声音在背景仍在播放后的片段被破坏

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

} 

} 
+0

您可以更新任何示例代码...问题是清楚的,但如果我们看到您的代码,我们可以解决它...更新您的代码有问题 – MLN

+0

这里是我的适配器类... –

+0

我解决了它通过重置RecyclerView的onDestroyView方法的片段 –

回答

0

我不知道如果我明白你的意思,但你可以尝试适配器覆盖onViewAttachedToWindowonViewDetachedFromWindow

@Override 
public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) { 
    //start playing 
} 

@Override 
public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) { 
    //stop play 
} 
+0

onViewDetachedFromWindow没有调用recyclervew的父代片段被销毁 –

0

如果您在播放视频格式的Web视图

然后使用此在的onDestroy

@Override 
protected void onDestroy() { 
myWebView.destroy(); 
myWebView = null; 
super.onDestroy(); 
} 

请更新您的示例代码,如果问题不解决......

我将更新我的答案,如果你更新你的问题

0

请尝试以下代码片段时你毁掉你的碎片,它对我有用。

1)建议1:

@Override 
public void onPause() { 
    super.onPause(); 
    wView.onPause(); 
    wView.pauseTimers(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    wView.resumeTimers(); 
    wView.onResume(); 
} 


@Override 
protected void onDestroy() { 
    wView.destroy(); 
    wView= null; 
    super.onDestroy(); 
} 

建议2:

wView.loadUrl(""); // passing blank param in this method will stop playing. 

试试看......

+0

但问题是WebView不在片段....它是在RecyclerVIew –

+0

哦,我明白了,然后试试@ dengyuhan的解决方案,我认为这将解决您的问题 – Bhavnik