【发布时间】:2012-03-10 04:26:35
【问题描述】:
如您所知,我们可以为我们创建的每种视图类型覆盖一些方法。我没有做任何 xml 布局代码,因为很多东西在运行时会改变形式,并且有些东西是动态创建的,所以编程解决方案是我在这里的最佳途径。
所以要了解我的问题的要点,可以说我的 Android 应用程序中有 50 个按钮。这些按钮可能位于一个活动上,但很可能跨越多个屏幕(活动)。
我创建了一个名为 CustomButton 的按钮类,它覆盖了 onClick(View view) 方法。如果某些按钮应该执行某些操作(假设它们是线性布局的一部分)并且某些按钮是相对布局的一部分,并且在每个相对布局中您想要获取有关此按钮的相对布局的信息,该怎么办?驻留在(也许您要获取有关相同相对布局中的所有文本视图的信息等)。
当然,一种解决方案是您可以获取每个按钮的 ID 并执行开关(大小写)或其他操作,并且根据返回的按钮的 ID,您可以执行某些操作。问题是我有 50 个按钮。如果我有 200 个呢?我是否真的必须在我的 switch 语句中进行 200 次案例检查才能确定我需要采取什么行动?
所以我试图找出哪些信息可供我使用,但我不知道在覆盖 onClick 时我可以使用这些信息。
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(!getClickInfo()){
((CustomButton)v).setText("I clicked the button");
setClickInfo(true);
}
else{
isClicked = false;
((CustomButton)v).setText("This is the button that i want to click");
}
}
所以这里是一个例子。我已经传入了代表被单击按钮的视图,当我一遍又一遍地单击它时,我可以更改按钮的文本。但是如果 Button 是相对布局的一部分呢?我能否获得有关也属于同一相对布局的其他视图的任何其他信息?如果某些按钮我想更改每次单击时的背景颜色而不是更改文本怎么办?如果我有 X 个按钮,我会尽量避免创建 X 个 ID——正如我指出的那样,你可能有数百个。
想知道是否有人对这里有什么比在 switch 语句中进行可能无限的大小写检查更好的方法有任何想法。如果我能找出按钮来自哪个视图(在我的情况下,按钮是外部视图的一部分),那么我可以对我的视图进行切换,而不仅仅是我的按钮 - 并使我的 switch 语句变得不那么繁琐和更容易维持。谢谢。
【问题讨论】:
-
你能用几句话准确地说出你想做的事吗?你的解释不清楚!
-
我不知道我是否了解您要做什么(尤其是您要收集的额外信息),但您可以在
Button上设置tag属性(在xml 布局)表示String并基于该String获取有关Button上下文的更多信息。 -
请看下面对 YuviDroid 的回答。很抱歉最初的混乱。
标签: android onclick android-button onclicklistener