鍍金池/ 問答/Android/ Android開發(fā),請教一個用RecyclerView列表播放視頻的問題

Android開發(fā),請教一個用RecyclerView列表播放視頻的問題

圖片描述
我點擊RecyclerView任意一個item的播放按鈕,始終都是第一個item播放,請問這個該怎么解決?視頻播放用的是IjkPlayer,Adapter用的是BRVAH.

public class HomeFragment extends Fragment implements BaseQuickAdapter.OnItemChildClickListener {

    @BindView(R.id.rv_home)
    RecyclerView mRvHome;

    private HomeAdapter homeAdapter;
    private List<HomeListBean> mDatas;

    private PlayerView player;
    private Context mContext;
    private List<VideoijkBean> list;
    private PowerManager.WakeLock wakeLock;
    View rootView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        this.mContext = getActivity();
        rootView = inflater.inflate(R.layout.fragment_home, null);
        ButterKnife.bind(this, rootView);

        initData();
        initEvent();
        return rootView;
    }

    private void initData() {
        mDatas = new ArrayList<>();
        HomeListBean bean;
        for (int i = 0; i < 6; i++) {
            bean = new HomeListBean();
            bean.setTvHomeItemTitle("2018年德瑪西亞冬季賽八強賽敗者組決賽 第3場2018年德瑪西亞第3場2018年德瑪西亞第3場2018年德瑪西亞");
            bean.setBtnGameType("LOL");
            bean.setTvType("解說");
            bean.setTvYearType("2018德瑪西亞杯");
            bean.setTvVideoCount("555個視頻");
            bean.setImgUrl("http://pic2.nipic.com/20090413/406638_125424003_2.jpg");
            mDatas.add(bean);
        }
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRvHome.setLayoutManager(linearLayoutManager);
        mRvHome.addItemDecoration(new DividerItemDecoration(getActivity(), 1));
        homeAdapter = new HomeAdapter(R.layout.item_home, mDatas, mContext);
        mRvHome.setLayoutManager(new LinearLayoutManager(getActivity()));
    }

    private void initEvent() {
        mRvHome.setAdapter(homeAdapter);
        homeAdapter.setOnItemChildClickListener(this);
    }

    @Override
    public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
        Toast.makeText(mContext, "點擊了第" + position + "個播放", Toast.LENGTH_SHORT).show();
        /**虛擬按鍵的隱藏方法*/
        rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //比較Activity根布局與當(dāng)前布局的大小
                int heightDiff = rootView.getRootView().getHeight() - rootView.getHeight();
                if (heightDiff > 100) {
                    //大小超過100時,一般為顯示虛擬鍵盤事件
                    rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
                } else {
                    //大小小于100時,為不顯示虛擬鍵盤或虛擬鍵盤隱藏
                    rootView.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<>();

        String url = "http://9890.vod.myqcloud.com/9890_9c1fa3e2aea011e59fc841df10c92278.f20.mp4";
//        View itemView = View.inflate(mContext, R.layout.item_home, null);
        player = new PlayerView(getActivity(), rootView) {
            @Override
            public PlayerView toggleProcessDurationOrientation() {
                hideSteam(getScreenOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                return setProcessDurationOrientation(getScreenOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ? PlayStateParams.PROCESS_PORTRAIT : PlayStateParams.PROCESS_LANDSCAPE);
            }

            @Override
            public PlayerView setPlaySource(List<VideoijkBean> list) {
                return super.setPlaySource(list);
            }
        };
        player.setProcessDurationOrientation(PlayStateParams.PROCESS_PORTRAIT)
                .setScaleType(PlayStateParams.fillparent)
                .forbidTouch(false)
                .hideSteam(true)
                .hideCenterPlayer(true)
//                .showThumbnail(new OnShowThumbnailListener() {
//                    @Override
//                    public void onShowThumbnail(ImageView ivThumbnail) {
//                        Glide.with(mContext)
//                                .load("http://pic2.nipic.com/20090413/406638_125424003_2.jpg")//默認(rèn)封面
//                                .placeholder(R.mipmap.temp_home)
//                                .error(R.color.cl_error)
//                                .into(ivThumbnail);
//                    }
//                })
                .setPlaySource(url)//播放網(wǎng)絡(luò)視頻
                .setChargeTie(false, 60).startPlay();//  手動設(shè)置暫停時間,true為需要收費(根據(jù)maxPlaytime自動暫停),false不收費(正常完整播放)
    }

    @Override
    public void onPause() {
        super.onPause();
        if (player != null) {
            player.onPause();
        }
        /**demo的內(nèi)容,恢復(fù)系統(tǒng)其它媒體的狀態(tài)*/
        MediaUtils.muteAudioFocus(mContext, true);
    }

    @Override
    public void onResume() {
        super.onResume();
        if (player != null) {
            player.onResume();
        }
        /**demo的內(nèi)容,暫停系統(tǒng)其它媒體的狀態(tài)*/
        MediaUtils.muteAudioFocus(mContext, false);
        /**demo的內(nèi)容,激活設(shè)備常亮狀態(tài)*/
        if (wakeLock != null) {
            wakeLock.acquire();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (player != null) {
            player.onDestroy();
        }
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (player != null) {
            player.onConfigurationChanged(newConfig);
        }
    }

    //TODO:Fragment監(jiān)聽返回按鈕
//    @Override
//    public void onBackPressed() {
//        if (player != null && player.onBackPressed()) {
//            return;
//        }
//        super.onBackPressed();
//        /**demo的內(nèi)容,恢復(fù)設(shè)備亮度狀態(tài)*/
//        if (wakeLock != null) {
//            wakeLock.release();
//        }
//    }

}
回答
編輯回答
熟稔

clipboard.png
這里改一下試試。

2017年10月20日 20:22
編輯回答
旖襯

應(yīng)該是獲取的position不對,自己多看看吧,定點調(diào)試一下。

2017年2月16日 20:59
編輯回答
莫小染

問題描述的很奇怪,可以列的仔細(xì)點:
點擊任意一個都播放第一個item的視頻

情況1.點擊事件也是第一個嗎(點擊第二個,Toast也顯示第一個嗎)。
情況2.點擊事件如果時正常的是不是指的是播放器View永遠(yuǎn)都是第一個在播放。

2017年7月2日 03:21
編輯回答
貓館

???然后咧?

2017年2月17日 03:53