Android数组+循环批量管理控件

Author Avatar
ssssdl 5月 30, 2018

Android管理多按钮,资源文件实现

0X00 问题来源

最近做了一个Android计算器交Android通识课作业, 感觉按钮控件很多,一个一个写监听太蠢了

0X01 解决方案

看了很多资料,总结加原创

1.建立id数组

string.xml文件建立数组,把所有需要统一管理的控件id写到这里面,比如我是计算器代码如下:

1
2
3
4
5
6
7
8
... ...
<string-array name="actions_button">
<item>@+id/bT0</item>
<item>@+id/bT1</item>
....
<item>@+id/bT15</item>
</string-array>
... ...

我还实现了计算器语音播报功能其中每一个按钮对应的语音文件也可以这样管理具体元素代码<item>@raw/num7</item>

2.获取按钮id

先建立一个Button的数组

1
Button[] btsz = new Button[16];//创建15个按钮的数组

在onCreate方法里面

1
2
3
4
5
6
7
8
9
10
... ...
TypedArray btidar = getResources().obtainTypedArray(R.array.actions_button);//通过调用string.xml文件中的数组批量管理按钮id
int len = btidar.length();//一共16个按钮
int[] btid = new int[len];
final int[] yinid = new int[len];
for (int i = 0; i < len; i++){
btid[i] = btidar.getResourceId(i,0);//获得按钮的id放到btid数组里面,这里可以写成两行
btsz[i] = (Button)findViewById(btid[i]);//绑定id到按钮
}
... ...

3.批量监听实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
... ...
for(int i = 0;i < 16;i++){//这里原创 哈哈哈哈
if(i == 14) //等号单独处理
continue;
btsz[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//这是在另一个类方法里面,不能使用循环变量i,需要辨别当前按钮的话可以使用以下代码
......
Button btt = (Button)findViewById(view.getId());//获取当前按钮
String str1 = btt.getText().toString();//获取按钮上的文本
......
}
});
}
... ...

0X02总结

这个解决方法不止一种,还可以重写onClick方法,利用view变量获取当前按钮id,然后一个swich就解决了