【问题标题】:How to reset back onItemClickListener to true after been set to null?设置为null后如何将onItemClickListener重置为true?
【发布时间】:2020-06-27 10:15:41
【问题描述】:

我在列表视图中设置了 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();
    }

}

【问题讨论】:

    标签: java android android-mediaplayer onitemclicklistener


    【解决方案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)

    【讨论】:

    • @gabrielassenga Gald 有帮助。快乐编码
    【解决方案2】:

    我会使用一个布尔值,您可以在视频播放时将其设置为真/假,并且根据其状态,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
                }
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2017-05-03
      • 2020-02-26
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2016-02-05
      • 2020-06-04
      相关资源
      最近更新 更多