我有一个Activity,在布局中为每个小部件调用setOnClickListener()来分配我的OnClick()处理程序。 在我的OnClick()处理程序中,我使用switch语句根据View参数的ID执行每个按钮所需的代码。 有没有一种方法可以为主视图分配默认处理程序,而不必为视图中的每个小部件进行单独的监听器分配调用?
================================================
更新
感谢kcoppock的起始示例,我编写了一个完整的类实现,该类具有一个静态方法,将Activity中所有View元素的单击处理程序设置为公共单击处理程序。 这适用于您有一个简单的布局并且希望在基于View参数对象的ID的switch语句中使用通用单击侦听器事件处理所有事件处理的情况。 要从Activity中使用它,请调用Misc.setDefaultClickHandler(this, this)。 当然,您的Activity需要实现View.OnclickListener接口。
================================================
更新
感谢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);
}
}
-- roschler