Как сбросить обратно onItemClickListener в true после того, как было установлено значение null? - PullRequest
0 голосов
/ 16 марта 2020

Я установил 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 ]

1 голос
/ 16 марта 2020

Вы можете создать метод, как показано ниже для выполнения необходимых действий

Вот псевдокод

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)

0 голосов
/ 16 марта 2020

Я бы использовал логическое значение, которое вы можете установить в 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
            }
        }
    });
}
...