【发布时间】:2011-08-11 07:12:32
【问题描述】:
我有一个 Activity,对于布局中的每个小部件,我调用 setOnClickListener() 来分配我的 OnClick() 处理程序。在我的 OnClick() 处理程序中,我使用 switch 语句根据 View 参数的 ID 为每个按钮执行所需的代码。有没有办法为主视图分配默认处理程序,而不必为视图中的每个小部件进行单独的侦听器分配调用?
================================================ =
更新
感谢 kcoppock 的起始示例,我编写了一个类的完整实现,该类具有一个静态方法,该方法将 Activity 中所有 View 元素的点击处理程序设置为一个公共点击处理程序。这适用于您有一个简单的布局并且希望在一个通用的单击侦听器事件中执行所有事件处理的情况,该事件使用基于 View 参数对象 ID 的 switch 语句。要在 Activity 中使用它,只需调用 Misc.setDefaultClickHandler(this, this)。自然你的 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);
}
}
-- 罗施勒
【问题讨论】:
-
你的意思是每个按钮都会共享1个onClickListener?
标签: android layout view android-activity onclick