当我们连续见多个按键的时候,可能我们会不厌其烦地连续复制粘贴代码,
但是有些地方的,我觉得不应该那么麻烦,自己感觉挺不错的代码,分享下,
喜欢喷的,欢迎喷,我要进步:public class MainActivity extends Activity {
private final int EQUIS_COUNT = 5;//总设备数
private final int EXAMS_COUNT = 20;//总故障数
private int index = 0;//主要用作for()循环里面的index

private TextView tips = null;
private Button equi01 = null;
private Button equi02 = null;
private Button equi03 = null;
private Button equi04 = null;
private Button equi05 = null;
private ArrayList<Button> buttons = new ArrayList<Button>();
private ArrayList<Equi> equis = new ArrayList<Equi>();
 

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_equi);

tips   = (TextView)this.findViewById(R.id.tipsID);

/*
equi01 = (Button)this.findViewById(R.id.equiButton01ID);
equi02 = (Button)this.findViewById(R.id.equiButton02ID);
equi03 = (Button)this.findViewById(R.id.equiButton03ID);
equi04 = (Button)this.findViewById(R.id.equiButton04ID);
equi05 = (Button)this.findViewById(R.id.equiButton05ID);
buttons.add(equi01);
buttons.add(equi02);
buttons.add(equi03);
buttons.add(equi04);
buttons.add(equi05);
*/

int id = R.id.equiButton01ID;
for(;index<5;index++){
buttons.add((Button)this.findViewById(id));
id++;
}
index = 0;

for(;index<EQUIS_COUNT;index++){
equis.add(new Equi());
}
index = 0;
for(;index<buttons.size();index++){

buttons.get(index).setOnClickListener(new OnClickListener() {
                                doSomething("做相同的事情");
}
});
}
index = 0; 
}}R文件:        public static final int equiButton01ID=0x7f080000;
        public static final int equiButton02ID=0x7f080001;
        public static final int equiButton03ID=0x7f080002;
        public static final int equiButton04ID=0x7f080003;
        public static final int equiButton05ID=0x7f080004;地址是连续的,连续加就行了
自己感觉挺不错的,如果有什么不好的,麻烦指出

解决方案 »

  1.   

    如果想省点代码,可以在layout里面为每个Button设置个onClick属性,然后再Activity里加上onClick的方法
      

  2.   

    这也是个方法,谢谢分享,
    然后我还想问下你呢:
    public class MainActivity extends Activity {
    private final int EQUIS_COUNT = 5;//总设备数
    private final int EXAMS_COUNT = 20;//总故障数
    private int index = 0;//主要用作for()循环里面的index
            .....
     

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_equi);

    tips   = (TextView)this.findViewById(R.id.tipsID);
    int id = R.id.equiButton01ID;
    for(;index<5;index++){
    buttons.add((Button)this.findViewById(id));
    id++;
    }
    index = 0;

    for(;index<EQUIS_COUNT;index++){
    equis.add(new Equi());
    }
    index = 0;
    for(;index<buttons.size();index++){

    buttons.get(index).setOnClickListener(new OnClickListener() {
                                    doSomething("做相同的事情" 
                                            //  + (index++)
                                      );
    }
    });
    }
    index = 0; 
    }
    }我现在是把index写成全局变量,所以它才能在匿名函数里存在,
    那如果我现在把index改为局部变量,要想成功地把匿名函数里面和外面的index一致的话,我该怎么弄??
    求技巧谢谢
      

  3.   

    想法很好  估计很多人都想过  不过有2个小问题需要注意1.id连续  这个需要注意下   并不是都是连续的(比如你过了段时间往xml加了个button)2.index为什么每次都要初始化为0......直接用for(int index = 0;index<EQUIS_COUNT;index++){
    不是更方便么  另外,你提出的index在内部类里引用,局部变量是不能改的,系统会提示你  强制写成final但是你可以先取出这个值,int a = index;  然后通过修改a来完成一些操作    
      

  4.   

    如果非要在匿名类里面使用局部变量,可以定义一个final int[] indexWrap = new int[] { index };
    使用的时候用indexWrap[0]来获取/设置index。如果是我设计的话,一般会在定义xml的时候给每个Button设置个onClick属性,再设置个tag属性。
    然后在Activity的onClick方法里面根据View.getTag()方法来做什么什么的