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循环再简化一下
接近 2 年之前 回复
in_clude
in_clude 回复汉代风云:
接近 2 年之前 回复
oSanYeCao1234567
oSanYeCao1234567 哪个地方有重复代码 ?
接近 2 年之前 回复
in_clude
in_clude 谢谢,试用了你的方法,但还是存在一些重复的代码。下面有截图。
接近 2 年之前 回复
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: 不同函数的话可以设置逻辑变量进行选择控制,这是通常的做法,我的博客中就有这样的例子.
接近 2 年之前 回复
in_clude
in_clude 但是不同的地方是函数,只是某些代码的字符不一样,这个要怎么封装啊
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
android中用style简化布局文件(减少重复代码)
android开发相对于ios有一个很大的优势,那就是可以通过xml来写布局,而且布局可以很灵活,能适应多种屏幕。但是时间久点你会发现xml中有太多的重复代码了,我真是恨死了在每次增加一个控件的时候都要不情愿的写上 android:layout_width="wrap_content"android:layout_height="wrap_content" 这两行, 如果我们有5个butt
如何设计循环避免代码重复,提高代码复用性
提高代码复用性为维护性的方法有很多,比如继承,构造代码块,循环等等,本文讲的是循环。 当有很多类似的东西时,往往导致代码重复,量大,这时要想到用设计循环的方法来减少重复的代码。 为了成功地设计循环,往往需要用到数组。 例如:     要实例化1000个button,每个button上写着不同的字符串,不用循环就会很多重复代码,而且写起来很费时。     JButton bt1 = new
Web前端性能优化(七)精简JS 移除重复脚本
本文转自:http://www.chinaz.com/web/2015/0417/399746.shtml 一、精简javascript 基础知识 精简:从javascript代码中移除所有的注释以及不必要的空白字符(空格,换行和制表符),减少javascript文件的大小。 混淆:和精简一样,会从javascript代码中移除注释和空白,另外也会改写代码。作为
C++编译重复代码消除
在编译c++文件的时候会产生很多重复代码,如扩展模板的时候,在不同的源文件里使用了相同的模板,那在编译各个源文件的时候都会针对该模板分别生成一样的目标代码,这部分代码就是重复代码。如果链接的时候直接把他们都链接进来,无疑是很浪费的事。为了解决这个问题,编译器会把同样的代码编译到相同的段,链接时就容易进行消除了。那如果编译到同样段的代码实际上是不同的,链接是否会出错?通常这种情况下连接器会随机选择一
浅析ID与CLASS的区别
关于css的ID和class这两种选择符,就页面效果而言,两个的视觉效果几乎无差别,但W3C对于ID与CLASS的设定是ID具有唯一性,CLASS具有普遍性,所以一个页面同一个ID只能使用一次,而class可以无限制使用。   在实际使用中,单一的元素或需要程序、JS控制的东西,需要用id定义;重复使用的元素、类别,则用class定义。   ID需要具有唯一性,并且尽量在外围使用,如网页的大致
【送给新手】重复代码解决示例一
举例说明了遇到重复代码应该如何去处理。
写一个MyList<T>的类,内部用T[]实现(不能使用系统的List<T>类),需要实现的接口如下:
public interface IMyList : IEnumerable , IEnumerable                 {                                              int Count { get; }                                 T this[int index] { get; set;
JAVA奇技淫巧简化代码之lombok
背景最近在做一个小功能,又不想在原有体态臃肿的项目中追加,为了调试方便并且可以快速开发就采用了springboot。由于使用了JPA,建了几个类,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,那么Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,想着前几天听说有一款简化神奇Lombok,特此拿来玩玩记录一下。简介Lom
Oracle编辑SQL语句(多次重复语句输入时简化)
Append text     :将text附加到当前行之后,简写A text change /old/new :将当前行中的old替换为new,简写C /old/new clear buffer    :清除缓存区的所有行,简写CL BUFF input text      :插入指定的文本text,简写I text DEL m n         :删除从第m行到第n行之间的命令行
精简代码真心是个技术活
把代码写长了不叫本事,能用最短的代码完成同样一件事才真是厉害。 —— 记将320行Matlab代码精简到230行