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

Posted

技术标签:

【中文标题】设置为null后如何将onItemClickListener重置为true?【英文标题】:How to reset back onItemClickListener to true after been set to null? 【发布时间】: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();
    


【问题讨论】:

【参考方案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
            
        
    );

【讨论】:

以上是关于设置为null后如何将onItemClickListener重置为true?的主要内容,如果未能解决你的问题,请参考以下文章

按钮 onClick 和 ListView onItemClick

为啥建议删除后将指针设置为null? [复制]

释放指针后真的应该将指针设置为“NULL”吗?

Android自定义ListView的Item无法响应OnItemClick的解决办法

释放堆内存后将指针设置为 NULL [重复]

在 android 中将按钮添加到我的 ListView 后,我的 onitemclick 不起作用?