我有一个活动,对于布局中的每个小部件,我调用setOnClickListener()来分配我的OnClick()处理函数。在我的OnClick()处理程序中,我使用switch语句根据View参数的ID为每个按钮执行所需的代码。有没有办法将默认处理程序分配给主视图,而不必对视图中的每个小部件进行单独的侦听程序分配调用?我可以为Android活动分配“默认”OnClickListener()吗?
============================================== ==
UPDATE
由于我已经编写了其具有设置单击处理程序中的活动的所有视图元素共同单击处理一个静态方法的类的完整实现kcoppock的起始样品。这适用于那些布局简单并且想要在使用基于View参数对象的ID的switch语句的常见click listener事件中执行所有事件处理的情况。要在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
你的意思是每个按钮都会共享一个onClickListener? – 2011-04-23 02:25:14