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

How to reset back onItemClickListener to true after been set to null?

我在我的列表视图中设置了onItemClickListener,项目包括视频、图像和文本。当用户在列表视图中点击视频时,它播放正常。现在,在 playVideo() 方法中,我将列表视图设置为 null,这样用户在播放时不应与视频互动。

我想 regain/reset 返回 onitemClicklisternertrue 之后视频播放完毕。我该如何实现,请协助。

    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();
    }

}

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

编辑:

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

或者button.setEnabled(false);(这个甚至可以用在.setOnClickListener()之前。

这两种方法的优点是按钮动画也会被禁用,如果您将多个可点击对象堆叠在一起,它们可能会更好地工作。 它们在视图 class 中,也可以在 ListView 上调用(但我没有尝试 "live")。

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
            }
        }
    });
}

您可以创建如下方法来执行所需的操作

这是伪代码

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)