设置为null后,如何将onItemClickListener重置为true?

时间:2020-03-16 09:48:00

标签: java android android-mediaplayer onitemclicklistener

我在列表视图中设置了onItemClickListener,其中包括视频,图像和文本。当用户在列表视图中点击视频时,它可以正常播放。现在,在playVideo()方法内部,将列表视图设置为 null ,这样用户在播放时不应与视频进行交互。

我想在视频播放完毕后重新注册/重新设置 onitemClicklisterner 恢复为 true 。我该如何实施,请协助。

    private void playVideo() {

    listOfMessages.setOnItemClickListener(null);

    videoText.setVideoURI(Uri.parse(chattVideo));
    frameText.setVisibility(View.VISIBLE);
    imageVideo.setVisibility(View.INVISIBLE);
    videoText.setVisibility(View.VISIBLE);
    btnText.setVisibility(View.GONE);

   try {
        videoText.setMediaController(mediaControllerText);
        mediaControllerText.show();
       videoText.seekTo(1);
      videoText.pause();
       videoText.stopPlayback();
       videoText.seekTo(1);
       videoText.resume();
    progressBarMessage.setVisibility(View.GONE);
        videoText.start();

        videoText.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {

                mp.start();

                mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                    @Override
                    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

                        progressBarMessage.setVisibility(View.GONE);
                        mp.start();
                    }
                });

            }
        });

        videoText.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {


               listOfMessages.setOnItemClickListener(this);// if I do like this android studio complains it cannot be applied inside MediaPlayer.OnCompletionListener
                btnText.setVisibility(View.VISIBLE);

            }
        });

        videoText.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {

                FancyToast.makeText(getContext(),"Something went wrong!",FancyToast.LENGTH_LONG,
                        FancyToast.ERROR,R.drawable.wheel,false).show();

                return false;
            }
        });


   } catch (Exception e) {
       PBar.setVisibility(View.GONE);
        FancyToast.makeText(getContext(),e.getMessage(),
                FancyToast.LENGTH_LONG,FancyToast.WARNING,R.drawable.wheel,false).show();
    }

}

2 个答案:

答案 0 :(得分:1)

您可以创建以下方法来做必需的事情

这是伪代码

private void setListener(boolean isPlaying){
        if(isPlaying){
            your_listview.setOnItemClickListener(null);
        }
        else{
            your_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //YOUR CODE
                }
            });
        }
    }

现在,在播放视频或其他视频时只需调用setListener(true) setListener(false)

答案 1 :(得分:0)

我将使用一个布尔值,您可以在播放视频时将其设置为true / false,并且根据其状态,onClickListener可以做出不同的反应。

修改

或者使用button.setClickable(false);(必须在.setOnClickListener()之后使用。

button.setEnabled(false);(甚至可以在.setOnClickListener()之前使用。

这两种方法的优点是按钮动画也将被禁用,如果您将多个可单击的对象彼此堆叠,它们可能会更好地工作。 它们在View类中,也可以在ListView上调用(但我没有尝试过“实时”)。

boolean isPlaying = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(isPlaying){
                //do stuff
            } else {
                //do someting else
            }
        }
    });
}