正如您所知道的,我们可以为我们创建的每种类型的View覆盖一些方法。我不会编写任何xml布局代码,因为很多东西都会在运行时更改表单,还有一些东西是动态创建的,所以编程解决方案是我在这里的最佳选择。
因此,为了得到我的问题的要点,假设我的Android应用程序中有50个按钮。这些按钮可能在一个活动上,但更有可能跨越多个屏幕(活动)。
我已经创建了一个名为CustomButton的按钮类,它覆盖了onClick(View view)方法。如果一些按钮应该做一些动作(假设它们是线性布局的一部分),而另一些按钮是相对布局的一部分,并且在每个相对布局中,你想要获得关于这个按钮所在的相对布局的信息(也许你想要获得关于同一相对布局中所有文本视图的信息,等等)。
当然,一种解决方案是,您可以获取每个按钮的ID,并执行切换(Case)或其他操作,然后根据返回的按钮的ID,您可以执行一些操作。问题是我有50个按钮。如果我有200个呢?我真的需要在switch语句中执行200次case检查才能确定需要采取什么操作吗?
因此,我正在尝试找出在重写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个If -正如我所指出的,您可能会有数百个按钮。
我想知道有没有人有什么想法比在switch语句中使用无限的case检查更好。如果我能找出按钮来自哪个视图(在我的例子中,按钮是外部视图的一部分),那么我就可以在我的视图上进行切换,而不仅仅是我的按钮-这样我的switch语句就不那么麻烦了,也更容易维护。谢谢。
发布于 2012-03-10 04:26:36
我不确定你的最终目标是什么。但是从你的视图(按钮)你可以得到它的父级(例如一个RelativeLayout)。然后,一旦你有了你的视图组,你就可以获得它的子组并做你需要做的任何事情。
例如:
@Override
public void onClick(View v) {
ViewParent parent = v.getParent();
if (parent instanceof RelativeLayout) {
// your button is inside a RelativeLayout
RelativeLayout rl = (RelativeLayout) parent;
int numChildren = rl.getChildCount();
// loop through children if you need to (use rl.getChildAt(index) to get each child)
...
}
}如果你不需要知道它实际上是一个RelativeLayout还是LinearLayout,或者其他什么,只需要使用ViewGroup。
希望能有所帮助。
发布于 2012-03-10 04:26:29
如果我没理解错的话,您可以简单地使用几个不同的CustomButton扩展:比如RelativeLayoutButton和LinearLayoutButton,然后让它们实现OnClickListener。重写扩展类中的onClick(),并按Button类型处理实现。
如果需要,您可以访问整个视图层次结构。比如说,就像这样:
//assuming a reference to Button button
//get a reference to the parent
View v = button.getParent();
ViewGroup parent;
ArrayList<View> siblings = new ArrayList<>();
if(v instanceof ViewGroup) parent = (ViewGroup) v;
for(int i = 0; i < parent.getChildCount(); i++) {
siblings.add(parent.getChildAt(i));
}https://stackoverflow.com/questions/9640308
复制相似问题