【问题标题】:How to prevent a double-tap on a ListView?如何防止在 ListView 上双击?
【发布时间】:2014-02-10 20:27:55
【问题描述】:

有没有办法防止在 Android 中双击 ListView?当我不小心点击ListView 上的项目时,我发现了这个,它打开了两个新窗口。有什么办法可以防止它打开同一个窗口两次。

【问题讨论】:

标签: android android-listview android-gesture


【解决方案1】:

只需在列表视图的选择上添加listView.setEnabled(false);,然后在选择何时响应或返回按钮后按下即可写----listView.setEnabled(true);

【讨论】:

【解决方案2】:

您应该将目标活动(单击项目时打开的活动)限制为在任何时间点只有一个实例。

回答this SO question 应该可以帮助您实现这一目标。这样,如果您不小心双击,您仍然只会看到一个新屏幕。

【讨论】:

    【解决方案3】:

    尝试引入和重写 isEnabled 方法

        @Override
    public boolean isEnabled(int position) {
        return false;
    }
    

    对于列表视图。

    为 flag 引入一个布尔值和一个 int 来保持上次点击的位置

     int recentlyClickedPoisition;
            boolean flagRecentClickedPoisition;
    

    如下重写 isEnabled 方法

       @Override
       public boolean isEnabled(int position) {
            if (flagRecentClickedPoisition && recentlyClickedPoisition == position) {
                return false;
            } else {
                return true;
            }
        }
    

    比从你的点击监听器中设置最后点击的位置如下

    public void setLastClickedPoisition(int recentlyClickedPoisition) {
        flagRecentClickedPoisition = true;
        this.recentlyClickedPoisition = recentlyClickedPoisition;
    }
    

    希望这对你有用,以防止双击,相应地增强。

    【讨论】:

      【解决方案4】:

      如果您只在列表中使用像 TextView 这样的单个项目,那么只需在此调用中创建一个实现 OnItemClickListener 的类,然后在 onItemClick() 方法中初始化 myListView。setOnItemClickListenet(null); 然后使用 Handler.postDelayed 方法再次设置 onItemClickListener。 喜欢

      myListView.setOnItemClickListener(new MyClickListenerClass());
      

      这对我来说一直有效。

      【讨论】:

        【解决方案5】:

        在您的 XAML 视图页面中,将 isEnable 属性设置为可绑定和双向模式。

        <ListView ItemsSource="{Binding items}"
                                          x:Name="listview"
                                          HasUnevenRows="True"
                                          IsEnabled="{Binding IsEnable, Mode=TwoWay}"
                                          RowHeight="10"
                                          SelectionMode="Single"
                                          VerticalScrollBarVisibility="Never">
        

        在您的 xaml 页面的视图模型中:

            private bool _isEnable = true;
            public bool IsEnable
            {
                get => _isEnable;
                set
                {
                    _isEnable = value; OnPropertyChanged(nameof(IsEnable));
                }
            }
        
        
        public ICommand TapCommand => new Command<//Model>(async (obj) =>
            {
                IsEnable = false;
               //your stuff 
                IsEnable = true;
            });
        

        【讨论】:

          【解决方案6】:

          我有两个窗格布局,一个控制详细视图的列表视图。首先我认为延迟处理程序是最糟糕的想法,但经过测试它是最简单的。否则,一旦加载了另一个详细信息,我将不得不在活动和片段之间进行通信以启用列表视图项。容易出错且复杂。

          /*example with Handler():*/
          
                  final boolean[] allowClick = {true};
          
                  myview.setOnClickListener(v -> {
          
                      //exit if not allowed
                      if(!allowClick[0])
                          return;
          
                      //do stuff
          
                      //we clicked, block another click
                      allowClick[0] =false;
          
                      //wait 0.7 seconds and allow another click
                      new Handler().postDelayed(() -> allowClick[0] =true, 700);
          
                  });
          

          【讨论】:

            猜你喜欢
            • 2017-07-19
            • 2018-12-25
            • 2012-06-01
            • 2022-01-21
            • 2012-04-24
            • 2015-12-21
            • 2019-02-05
            • 2011-09-11
            • 2019-08-29
            相关资源
            最近更新 更多