首页 > 解决方案 > 如何从 onLongClick() 重新运行循环?

问题描述

这是代码。如果一个视图被长按,我希望这个循环通过使 i = 0 重新运行。但是 setOnLongClickListener 之后的 if 语句只在开始时执行一次,而不是在长按视图之后执行。

final hasLongClicked[] = {false};
for(int i = 0; i < mLLayout.getChildCount(); i++){
                // tried declaring hasLongClicked[] here but no avail
                View child = mLLayout.getChildAt(i);
                child.setOnLongClickListener(new View.OnLongClickListener(){
                    @Override
                    public boolean onLongClick(View v) {
                        //Some stuff
                        hasLongClicked[0] = true;
                        return false;
                    }
                });
                if(hasLongClicked[0])
                    i = 0;
        
            }

我该如何度过这个难关?另外,这是将OnLongClickListeners 设置为线性布局的所有子视图的好方法吗?

非常感谢您的帮助。谢谢

标签: android-studiofor-looponlongclicklistener

解决方案


我通过创建一个函数并在事件被处理时调用自己来解决它,如下所示:

    private void discardEvents(LinearLayout mLLayout) {
    for(int i = 0; i < mLLayout.getChildCount(); i++){
        View child = mLLayout.getChildAt(i);
        child.setOnLongClickListener(new View.OnLongClickListener(){
            @Override
            public boolean onLongClick(View v) {
                //Do your stuff
                discardEvents(mLLayout);
                return false;
            }
        });
    }
}

虽然我想知道这是否会导致任何问题/隐藏错误。


推荐阅读