【问题标题】:android : pause / stop webview in recyclerviewandroid:在recyclerview中暂停/停止webview
【发布时间】:2015-12-17 13:28:46
【问题描述】:

我正在尝试在 RecyclerView 中显示 youtube 视频。一切正常,但我遇到了问题(我是新手)。在阅读了一些帖子(Post 1Post 2)之后,我现在意识到即使应用程序停止或进入后台,WebView 线程也不会停止的问题。

我的问题是在RecyclerView.Adapter 中处理WebView 的暂停。我已经创建了 RecyclerView 适配器,但我不知道如何在 ViewHolderRecyclerView.Adapter 中停止 WebView

如果有人可以帮助我。

【问题讨论】:

    标签: android webview


    【解决方案1】:

    非常感谢@cwbowron。为了更清楚,我在这里粘贴了我的代码。我们需要重写两个方法以使其按预期工作:

    onViewAttachedToWindow() 在此适配器创建的视图已附加到窗口时调用。

    onViewDetachedFromWindow() 在由此适配器创建的视图已与其窗口分离时调用。

    这正是我所需要的。下面是我的实现:

    public class RecyclerAdapterMessage extends RecyclerView.Adapter<RecyclerAdapterMessage.MessagesViewHolder> {
    
        private Context mContext;
        private ArrayList<ModelInboxFeed> modelInboxFeedArrayList;
        private OnUserProfileClickListener mOnUserProfileClickListener;
    
        public RecyclerAdapterMessage(Activity context, ArrayList<ModelInboxFeed> modelInboxFeedArrayList) {
            ...
        }
    
        /**
         * Create new views (invoked by the layout manager)
         */
        @Override
        public RecyclerAdapterMessage.MessagesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card_normal, parent, false);
            return new MessagesViewHolder(mContext, view);
        }
    
        /**
         * Replace the contents of a view (invoked by the layout manager)
         */
        @Override
        public void onBindViewHolder(final RecyclerAdapterMessage.MessagesViewHolder holder, int position) {
            ...
        }
    
        /**
         * Return the size of your data set (invoked by the layout manager)
         */
        @Override
        public int getItemCount() {
            return modelInboxFeedArrayList.size();
        }
    
        public interface OnUserProfileClickListener {
            void onUserProfileClick();
        }
    
        public class MessagesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
           private WebView mWebView;
           ...
        }
    
        @Override
        public void onViewDetachedFromWindow(MessagesViewHolder holder) {
            super.onViewDetachedFromWindow(holder);
    
            holder.mWebView.onPause();
        }
    
        @Override
        public void onViewAttachedToWindow(MessagesViewHolder holder) {
            super.onViewAttachedToWindow(holder);
    
            holder.mWebView.onResume();
        }
    }
    

    希望对有相同需求的人有所帮助。

    编码愉快..!!

    【讨论】:

      【解决方案2】:

      RecyclerView.Adapter 中有 ViewHolders 的生命周期回调。您应该能够覆盖 onViewDetachedFromWindow 以停止 WebView

      【讨论】:

      • 好的,先生..我正在处理它..我会尝试更新你。谢谢你.. :)
      • Omg.. 它的工作就像一个魅力.. 谢谢你先生.. 你救了我的一天.. 昨天,我一直在搜索并试图摆脱这个问题过去 4-5 小时...但是当我尝试这个时,就像..哇.. :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 2015-06-25
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多