【问题标题】:Two onClickListeners and interaction between them两个 onClickListener 以及它们之间的交互
【发布时间】:2013-04-10 03:29:18
【问题描述】:

假设我有两个 onClickListener,A 和 B,以及分配给它们的一些按钮。有没有办法让每个单击的按钮“属于” onClickListener A 来监听、等待或其他任何东西,直到单击下一个按钮,如果它来自 onClickedListener B 在此之后执行一些代码,那么什么并不重要,如果它来自 onClickListener A保持原样,只等待下一次单击并像上一个按钮一样等待,等等?

【问题讨论】:

    标签: java android


    【解决方案1】:

    好的,所以我编辑了我的答案,以按照其他问题的要求进行操作。让我知道这是否有意义。我不会为您完成这项工作,所以这是一个简单的示例,可以向您展示逻辑是什么。

    //This is how you set the TAG so you have it. But I know you use getTag, so I am not sure     
    //what you are using it for.
    a1 = (Button) findViewById(R.id.bA1);
    a2 = (Button) findViewById(R.id.bA2);
    b1 = (Button) findViewById(R.id.bB1);
    b2 = (Button) findViewById(R.id.bB2);
    a1.setTag("A");
    a2.setTag("A");
    b1.setTag("B");
    b2.setTag("B");
    
    
    View.OnClickListener listener = new View.onClickListener() {
        public void onClick(View view) {
            String tag = (String)view.getTag();
            if(tag.equals("A")
                //example on one B button with assumed TAG of "B"
                someButton.setOnClickListener(listener);
                //deregister all your A Views, but again, I'll do one as an example
                //in this case I'll quickly just deregister the A button or view just clicked
                view.setOnClickListener(null);
            else
                if(tag.equals("B")) {
                    /*I guess do your thing here but deregister all the B views again
                    and register all the A views again*/
                    someButton.setOnClickListener(null);
                    otherAButton.setOnClickListener(listener);
                }
        }
    });
    

    所以我做了一些假设来缩短代码。例如。使用setTag 方法将所有A Views 设置为"A" 标签,反之亦然使用B Views。另外我假设您希望 A 视图开始监听点击,因此当第一次启动 Activity 或 Fragment 时,您可以通过 setOnClickListenerlistener 设置为 A 视图。

    【讨论】:

    • Check out this link,也许你会明白我为什么问这个。在我给你的链接上,我试图为我的问题找到解决方案,但我没有,所以我试着像我在这里问的那样做。
    • 哦,在这种情况下,您可以将 A 视图中的侦听器值设置为 null 以取消注册它们。因此,当您单击 A 值时,注册 B 视图并取消注册 A 视图。我会用上面的例子做一个简单的例子。
    • 好的,完成后告诉我。非常感谢。我试图在上个月完成这个,但没有运气。
    • 我完成了一个简单的例子。请记住,它很快,我没有测试代码。这也是一个示例,因此我建议使用单个 A View 和单个 B View 对其进行测试,以了解其工作原理。但它应该给你你所寻求的行为。
    • 问题是,当你说 setTags 时,我的按钮上已经附加了一些标签(例如 A1 和 B1 有标签“1”,所以我可以比较和配对它们),所以我不知道如何设置您提到的标签。 here你可以看到我的整个游戏课,也许你会知道如何结束这个。
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2018-05-07
    • 2020-03-15
    • 1970-01-01
    相关资源
    最近更新 更多