几乎一样的重复代码如何简化?

  _button_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(_textView.getText().length()>=18){
                    Toast.makeText(getApplicationContext(),"长度超出要求",Toast.LENGTH_SHORT).show();

                }
                else {
                    _textView.setText(_textView.getText()+"1");
                }

            }
        });

        Button _button_2=(Button)this.findViewById(R.id.button_2);
        _button_2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(_textView.getText().length()>=18){
                    Toast.makeText(getApplicationContext(),"长度超出要求",Toast.LENGTH_SHORT).show();

                }
                else {
                    _textView.setText(_textView.getText()+"2");
                }
            }
        });

        Button _button_3=(Button)this.findViewById(R.id.button_3);
        _button_3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(_textView.getText().length()>=18){
                    Toast.makeText(getApplicationContext(),"长度超出要求",Toast.LENGTH_SHORT).show();

                }
                else {
                    _textView.setText(_textView.getText()+"3");
                }
            }
        });


上述代码中存在大量的相似代码,又不能写成函数的形式,该如何简化这个代码。

给你写了一个demo

图片说明

new View.OnClickListener可以赋值给一个变量,底下可以复用
View.OnClickListener listen = new View.OnClickListener;

将该段代码封装起来,赋值给给一个View.OnClickListener对象,例如View.OnClickListener listener = View.OnClickListener 。
你那样写无非是用了匿名内部类的方式,button.setOnClickListener(这里本身就是一个监听器对象), 所以这样写可以合并
重复代码,达到简洁易读的效果。

还通过实现一个接口的方式,来实现监听器实现OnClickListener接口,进行setOnClickListener(this)绑定。
这个可以批量设置,比较方便。通过Switch控制对不同Button Click事件的响应方法,在此不做赘述具体实现
方式你可以自己搜下然后研究下。

图片说明
试了2楼的做法,确实减少了很大一部分代码,但还是存在一些重复代码,好像也不能用数组。

建个包把相同的代码放在里面