鍍金池/ 問答/Android/ 請問用RecyclerView播放視頻如何只讓一條item播放?

請問用RecyclerView播放視頻如何只讓一條item播放?

圖片描述

視頻播放用的IjkPlayer,Adapter用的是BRVAH.我現(xiàn)在點擊每一個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根布局與當(dāng)前布局的大小
                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();
//        }
    }
回答
編輯回答
故林

你設(shè)置一個flag就行了,播放哪個就放flag等于哪個position,然后每次播放notifyDataSetChanged一下,你那個應(yīng)該也可以,應(yīng)該是少了notifyDataSetChanged

2018年1月23日 18:32