2017-05-04 93 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