Java 重构Android Pin屏幕代码

Java 重构Android Pin屏幕代码,java,android,refactoring,Java,Android,Refactoring,对于我的Android应用程序,我正在编写一个pin屏幕片段。它有一个数字键盘,我需要向所有这些键盘添加一个事件处理程序。下面的代码可以工作,但看起来不太好。我曾经考虑过创建一个按钮数组并通过它们循环来实现这一点,但在Java中有更简单的方法吗?即使是将它们放入一个数组,也需要我做一些类似于Button[]buttons=[button1,button2,button3,…]的操作。 button1 = (Button) rootView.findViewById(R.id.button1);

对于我的Android应用程序,我正在编写一个pin屏幕片段。它有一个数字键盘,我需要向所有这些键盘添加一个事件处理程序。下面的代码可以工作,但看起来不太好。我曾经考虑过创建一个按钮数组并通过它们循环来实现这一点,但在Java中有更简单的方法吗?即使是将它们放入一个数组,也需要我做一些类似于
Button[]buttons=[button1,button2,button3,…]的操作。

button1 = (Button) rootView.findViewById(R.id.button1);
button1.setOnClickListener(pinButtonHandler);

button2 = (Button) rootView.findViewById(R.id.button2);
button2.setOnClickListener(pinButtonHandler);

button3 = (Button) rootView.findViewById(R.id.button3);
button3.setOnClickListener(pinButtonHandler);

button4 = (Button) rootView.findViewById(R.id.button4);
button4.setOnClickListener(pinButtonHandler);

button5 = (Button) rootView.findViewById(R.id.button5);
button5.setOnClickListener(pinButtonHandler);

button6 = (Button) rootView.findViewById(R.id.button6);
button6.setOnClickListener(pinButtonHandler);

button7 = (Button) rootView.findViewById(R.id.button7);
button7.setOnClickListener(pinButtonHandler);

button8 = (Button) rootView.findViewById(R.id.button8);
button8.setOnClickListener(pinButtonHandler);

button9 = (Button) rootView.findViewById(R.id.button9);
button9.setOnClickListener(pinButtonHandler);

button0 = (Button) rootView.findViewById(R.id.button0);
button0.setOnClickListener(pinButtonHandler);

有什么方法可以清理这一点吗?

您可以将重复的两行提取到如下方法中:

void registerClickHandler(String buttonId, IHandler handler) {
    Button button = (Button) rootView.findViewById(id);
    button.setOnClickListener(handler);
}
registerClickHandler(R.id.button1, pinButtonHandler);
registerClickHandler(R.id.button2, pinButtonHandler);
// ...
假设处理程序接口/超类名为IHandler,ID为字符串。然后注册码将如下所示:

void registerClickHandler(String buttonId, IHandler handler) {
    Button button = (Button) rootView.findViewById(id);
    button.setOnClickListener(handler);
}
registerClickHandler(R.id.button1, pinButtonHandler);
registerClickHandler(R.id.button2, pinButtonHandler);
// ...
这并不奇怪,但是您必须在某个地方指定按钮id和处理程序之间的映射,这对眼睛来说相对容易,并且不需要太多的击键