如何使用反射通过一个循环为所有字段设置onClickListener?

时间:2016-04-30 23:33:52

标签: android loops reflection onclicklistener butterknife

我想为我的活动中的所有项目设置相同的onClickListener。可以用循环来做吗?不幸的是,我没有成功地尝试反思。 我的代码:

private void setUpOnClickListeners() {
 Field[] fields = viewHolder.getClass().getDeclaredFields();
    for (Field field : fields) {
        try {
            field.setAccessible(true);
            Method[] m = field.getDeclaringClass().getMethods();
            for (Method method : m) {
                if (method.getName().contains("setOnClickListener")) {
                    method.invoke(field, onClickListener);
                }
            }
            field.setAccessible(false);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

private View.OnClickListener onClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (v == viewHolder.mBtStartStop) {
            presenter.onButtonStartStop();
        } else if (v == viewHolder.mBtDetails) {
            presenter.onButtonDetails();
        } else if (...)
           ...
        }  
    }
};

static class ViewHolder {
    public ViewHolder(View view) {
        ButterKnife.bind(this, view);
    }

    @Bind(R.id.activity_main_bt_stop)
    Button mBtStartStop;

    @Bind(R.id.activity_main_tv_how_many_hours)
    TextView mTvHours;

    @Bind(R.id.fragment_main_bt_details)
    CircleButton mBtDetails;

    ...

    ...
}

由于布局中的许多领域,这将是一种便利......

0 个答案:

没有答案