安卓开发中解决一个界面多个按钮注册造成代码冗长的问题

前言

刚刚入门安卓开发不久,有一个任务开发计算器(我发现老师们都喜欢让开发这个,还有什么贪吃蛇、扫雷),最简单的计算器也有0-9以及+-/*.=这么多按钮,设置起来十分繁琐,而且维护起来不容易,就想到找解决方法。

主要解决java代码部分,xml界面不算繁琐而且也莫得办法

常规思路及问题

  1. 定义按钮变量

    private Button btn_0,btn_1,btn_2,btn_3,btn_4,btn_5....btn_eva,btn_dot;

    按照xml的id值设立button

  2. 注册button变量

    btn_0=findViewById(R.id.btn_0);
    btn_1=findViewById(R.id.btn_1);
    btn_2=findViewById(R.id.btn_2);
    ...
  3. 绑定单击事件

    使用Activity继承onClickListener()接口的方式设立点击事件

    btn_0.setOnClickListener(this);
    btn_1.setOnClickListener(this);
    btn_2.setOnClickListener(this);
    ...

算上最少的键,也要有17个按钮,代码又长又乱。

改进1--使用数组

原理:

因为我们最终在重写onClick事件的时候需要是对不同id的按钮做出不同响应,可以直接通过view.getId()获取id,写case语句来分类处理。所以button变量其实并没有多大的作用,只是注册我们在xml里的按钮,只要所有id的button都注册了,就完成任务了。

通过把id放在一个数组里,建立button变量也直接建立数组

循环进行注册,并直接绑定设立单击事件监听

代码实例

private Button []buttons=new Button[16];//建立了包含16个button的buttons数组,因为当时漏了除法所以是16个了
    private int []id=new int[]{
            R.id.btn_9,R.id.btn_8,R.id.btn_7,R.id.btn_CE,
            R.id.btn_6,R.id.btn_5,R.id.btn_4,R.id.btn_sub,
            R.id.btn_3,R.id.btn_2,R.id.btn_1,R.id.btn_add,
            R.id.btn_0,R.id.btn_dot,R.id.btn_mul,R.id.btn_eva
    };//把id都放在id[]数组中

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show=(TextView)findViewById(R.id.show);
        for(int i=0;i<buttons.length;i++){
            buttons[i]=(Button) findViewById(id[i]);
            buttons[i].setOnClickListener(this);
        }//循环进行绑定

    }

处理点击事件只需使用case

switch (v.getId())
        {
            case R.id.btn_0:apd(show,'0',isEVA);break;
            case R.id.btn_1:apd(show,'1',isEVA);break;
            case R.id.btn_2:apd(show,'2',isEVA);break;
            case R.id.btn_3:apd(show,'3',isEVA);break;
            case R.id.btn_4:apd(show,'4',isEVA);break;
            case R.id.btn_5:apd(show,'5',isEVA);break;
            case R.id.btn_6:apd(show,'6',isEVA);break;
            case R.id.btn_7:apd(show,'7',isEVA);break;
            case R.id.btn_8:apd(show,'8',isEVA);break;
            case R.id.btn_9:apd(show,'9',isEVA);break;
            case R.id.btn_add:apd(show,'+',isEVA);break;
            case R.id.btn_sub:apd(show,'-',isEVA);break;
            case R.id.btn_mul:apd(show,'*',isEVA);break;
            case R.id.btn_dot:apd(show,'.',isEVA);break;
        }

改进2--使用动态生成view控件

其实..我还没看这种方法,有点困了,不过我有csdn博客地址(狗头)

传送门:Android程序中动态添加Button

总结

当然,方法一简单,但是方法二介绍了一种新思路,以后可能会用上,所以也总结了进去。如有问题可以留言提出。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注