【发布时间】:2013-04-10 03:29:18
【问题描述】:
假设我有两个 onClickListener,A 和 B,以及分配给它们的一些按钮。有没有办法让每个单击的按钮“属于” onClickListener A 来监听、等待或其他任何东西,直到单击下一个按钮,如果它来自 onClickedListener B 在此之后执行一些代码,那么什么并不重要,如果它来自 onClickListener A保持原样,只等待下一次单击并像上一个按钮一样等待,等等?
【问题讨论】:
假设我有两个 onClickListener,A 和 B,以及分配给它们的一些按钮。有没有办法让每个单击的按钮“属于” onClickListener A 来监听、等待或其他任何东西,直到单击下一个按钮,如果它来自 onClickedListener B 在此之后执行一些代码,那么什么并不重要,如果它来自 onClickListener A保持原样,只等待下一次单击并像上一个按钮一样等待,等等?
【问题讨论】:
好的,所以我编辑了我的答案,以按照其他问题的要求进行操作。让我知道这是否有意义。我不会为您完成这项工作,所以这是一个简单的示例,可以向您展示逻辑是什么。
//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 时,您可以通过 setOnClickListener 将 listener 设置为 A 视图。
【讨论】:
View 和单个 B View 对其进行测试,以了解其工作原理。但它应该给你你所寻求的行为。