android:在recyclerview

时间:2015-12-17 13:28:47

标签: android webview

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

我的问题是处理WebViewRecyclerView.Adapter的停顿。我创建了RecyclerView适配器,但我不知道如何阻止WebViewViewHolder中的RecyclerView.Adapter

如果有人可以帮助我。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

非常感谢@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();
    }
}

希望它可以帮助任何有相同要求的人。

快乐编码.. !!