请问用RecyclerView播放视频如何只让一条item播放?

图片描述

视频播放用的IjkPlayer,Adapter用的是BRVAH.我现在点击每一个item都会播放,如何点击一个item的播放让另一个暂停呢?我用SharedPreferences保存上一条播放item的position,然后点击新的item就让上一条position的item暂停,但是这样偶尔也会两个item都在播放
这是RecyclerView的item点击事件代码:

  @Override
    public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
        if (view.getId() == R.id.play_icon) {
            videoPlay(position);
        } else if (view.getId() == R.id.app_video_play) {
            Toast.makeText(mContext, "点击了底部栏播放按钮", Toast.LENGTH_SHORT).show();
        }
    }

    private void videoPlay(int position) {
        HomeListBean bean = mDatas.get(position);
        List<IjkVideoView> list = homeAdapter.list;
        IjkVideoView ijkVideoView = list.get(position);
        final View ijkVideoViewParent = (View) ijkVideoView.getParent();
        player = new PlayerView(getActivity(), ijkVideoViewParent) {
            @Override
            public PlayerView toggleProcessDurationOrientation() {
                hideSteam(getScreenOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                return setProcessDurationOrientation(getScreenOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ? PlayStateParams.PROCESS_PORTRAIT : PlayStateParams.PROCESS_LANDSCAPE);
            }
        };
        /**虚拟按键的隐藏方法*/
        ijkVideoViewParent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //比较Activity根布局与当前布局的大小
                int heightDiff = ijkVideoViewParent.getRootView().getHeight() - ijkVideoViewParent.getHeight();
                if (heightDiff > 100) {
                    //大小超过100时,一般为显示虚拟键盘事件
                    ijkVideoViewParent.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
                } else {
                    //大小小于100时,为不显示虚拟键盘或虚拟键盘隐藏
                    ijkVideoViewParent.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
                }
            }
        });

        /**常亮*/
        PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "liveTAG");
        wakeLock.acquire();
        list = new ArrayList<>();

        player.setProcessDurationOrientation(PlayStateParams.PROCESS_PORTRAIT)
                .setScaleType(PlayStateParams.fillparent)
                .forbidTouch(false)
                .hideSteam(true)
                .hideCenterPlayer(true)
                .setPlaySource(bean.getVideoUrl())
                .hideRotation(true)
                .hideHideTopBar(true)
                .startPlay();

        boolean isPlaying = ijkVideoView.isPlaying();//视频正在播放
//        if(isPlaying){
//            Toast.makeText(mContext, "item"+position+"正在播放", Toast.LENGTH_SHORT).show();
//        }
    }
阅读 4.1k
1 个回答

你设置一个flag就行了,播放哪个就放flag等于哪个position,然后每次播放notifyDataSetChanged一下,你那个应该也可以,应该是少了notifyDataSetChanged

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题