2017-05-04 15 views
1

私は、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))); 
      } 
     }); 
    } 

} 

} 
+0

あなたが任意のサンプルコードを更新することができます...質問はっきりしていますが、私たちがあなたのコードを見ればそれを解決することができます...問題のあなたのコードを更新してください – MLN

+0

ここに私のアダプタクラスです... –

+0

私はRecyclerviewを次のようにして解決しました:onDestroyViewフラグメントのメソッド –

答えて

0

を助けてください、私はあなたが何を意味するかを理解するかどうかわからないんだけど、あなたは、アダプタの上書きonViewAttachedToWindowonViewDetachedFromWindowを試すことができます。あなたがビデオのフォームのWebビューを演奏している場合は、問題が解決されていない場合

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

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

onViewDetachedFromWindowは呼び出されませんでした。recyclervewの親フラグメントは破棄されました –

0

はその後...あなたのサンプルコードを更新してください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

Ohhh私は、 @ dengyuhanの解決策を試して、私はあなたの問題を解決するつもりだと思う – Bhavnik

関連する問題