我有一个 Activity,对于布局中的每个小部件,我调用 setOnClickListener() 来分配我的 OnClick() 处理程序。在我的 OnClick() 处理程序中,我使用 switch 语句根据 View 参数的 ID 为每个按钮执行所需的代码。有没有办法将默认处理程序分配给主视图,而不必为视图中的每个小部件进行单独的侦听器分配调用?
=================================================
UPDATE
感谢 kcoppock 的起始示例,我编写了一个类的完整实现,该类具有一个静态方法,该方法将 Activity 中所有视图元素的单击处理程序设置为公共单击处理程序。这适用于这样的情况:您有一个简单的布局,并且希望在公共单击侦听器事件中执行所有事件处理,该事件使用基于 View 参数对象 ID 的 switch 语句。要从活动中使用它,只需调用Misc.setDefaultClickHandler(这个,这个)。当然,您的 Activity 需要实现 View.OnclickListener 接口。
package {put your package name here};
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
public class Misc {
public Misc() {
super();
}
// Returns the root view for a given activity.
public static View getRootView(Activity activity) {
return activity.findViewById(android.R.id.content).getRootView();
}
private static void assignClickHandler(View root, View.OnClickListener theOnClickListener) {
// Is it a View or a View group?
if (root instanceof ViewGroup) {
// It's a ViewGroup, process all it's children.
ViewGroup vg = (ViewGroup) root;
for(int i = 0; i < vg.getChildCount(); i++)
// Make recursive call.
assignClickHandler(vg.getChildAt(i), theOnClickListener);
}
else
{
// Child is a View. Set the desired context for the click handler.
root.setOnClickListener(theOnClickListener);
}
}
public static void setDefaultClickHandler(Activity activity, View.OnClickListener theOnClickListener) {
assignClickHandler(getRootView(activity), theOnClickListener);
}
}
——罗施勒
据我所知,但您可以使用循环,如下所示:
ViewGroup root = findViewById(R.id.my_root_layout);
final Context context = this;
assignClickHandler(root);
public void assignClickHandler(int root) {
for(int i = 0; i < root.getChildCount(); i++) {
if(root.getChildAt(i) instanceof ViewGroup) {
assignClickHandler(root.getChildAt(i));
}
else {
(root.getChildAt(i)).setOnClickListener(context);
}
}
}
请注意,它也会递归调用其中的任何嵌套布局。我还没有测试过这个,所以我可能搞乱了一些语法,但如果你只是想避免手动设置每一个,那么这个想法应该可行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)