2 in clude in_clude 于 2016.09.25 10:26 提问

几乎一样的重复代码如何简化?
  _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");
                }
            }
        });


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

6个回答

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2016.09.25 11:36
已采纳

给你写了一个demo

图片说明

in_clude
in_clude 回复汉代风云: 就是每个按钮的都必须创建一次,调用函数,循环一个一个的写,但我想可以再简化一下不?比如可不可以用for循环再简化一下
大约一年之前 回复
in_clude
in_clude 回复汉代风云:
大约一年之前 回复
oSanYeCao1234567
oSanYeCao1234567 哪个地方有重复代码 ?
大约一年之前 回复
in_clude
in_clude 谢谢,试用了你的方法,但还是存在一些重复的代码。下面有截图。
大约一年之前 回复
lwd791123
lwd791123   2016.09.25 11:00

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

lanxun1992
lanxun1992   2016.09.25 15:07

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

lanxun1992
lanxun1992   2016.09.25 15:21

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

in_clude
in_clude   2016.09.25 17:29

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

xianfajushi
xianfajushi   2016.09.25 19:38

提取相同部分为方法或函数或封装,不同部分作传参。

xianfajushi
xianfajushi 回复Nldmg: 不同函数的话可以设置逻辑变量进行选择控制,这是通常的做法,我的博客中就有这样的例子.
大约一年之前 回复
in_clude
in_clude 但是不同的地方是函数,只是某些代码的字符不一样,这个要怎么封装啊
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!