android 如何防止在ListView上双击?

4urapxun  于 2022-11-03  发布在  Android
关注(0)|答案(7)|浏览(239)

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

oxcyiej7

oxcyiej71#

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

n1bvdmb6

n1bvdmb62#

您应该限制目标Activity(单击项目时打开的Activity),使其在任何时间点都只有一个示例。
this SO question的回答应该可以帮助你实现这一点。这样,如果你不小心双击,你仍然会看到一个新的屏幕。

vwoqyblh

vwoqyblh3#

尝试引入和覆盖isEnabled方法

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

列表视图。
引入一个布尔值for 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;
}

希望这将为您的工作,以防止双击,增强相应。

bvjveswy

bvjveswy4#

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

myListView.setOnItemClickListener(new MyClickListenerClass());

这对我来说是一直有效的。

u5i3ibmn

u5i3ibmn5#

在您的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;
    });
oiopk7p5

oiopk7p56#

我有一个双窗格布局,一个列表视图控制一个细节视图。一开始我认为延迟处理程序是最糟糕的主意,但经过测试后,它是最简单的。否则,一旦加载了另一个细节,我就必须在Activity和fragment之间进行通信以启用列表视图项。容易出错且复杂。

/*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);

        });
jfgube3f

jfgube3f7#

这个解决方案是在ListFragment上实现的。如果点击取消ListFragment以显示细节视图(通常会这样),则下次ListFragment出现时,点击计数器将在OnResume()中重置:

public class MyListFragment extends ListFragment {

    int mTapCounter;

    @Override
    public void onResume() {
        super.onResume();

        //Set-Reset ListView clickListener
        mTapCounter = 0;
    }

    //ListView item tap event handler
    @Override
    public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {

        //Disable click listener to prevent double-tap
        mTapCounter++;

        //Only process single-tap
        if(mTapCounter == 1) {

            /* YOUR TAP HANDLER CODE HERE */
        }

        super.onListItemClick(l, v, position, id);
    }
}

相关问题