这是我的Array适配器。它为列表中的每个开关按钮分配一个监听器,该监听器取决于数据库给出的ID(使用
出于调试目的,我只是使用相同的on change监听器,而不管状态如何。因此,无论我打开还是关闭它,它都运行相同的函数。
我的问题是,有时候当我打开第一个开关时,第七个开关会被打开,当我打开第二个开关时,第八个开关会被打开。我做错了什么,但我真的搞不清楚。第6、7和8个开关不能正常工作。
您可以在LCD上看到,当我按顺序打开开关时,它必须给我输出“12345678”。但它没有。相反,它给出“12345112”。
编辑:Emil Adz给出的答案有效。给我输出“12345678”。但我有一个问题。如果我打开switch1,滚动到不可见并向上滚动,开关会重置为OFF。为什么会这样?
devices.id
传递)。但由于某种原因,开关监听器无法从开关获取正确的状态。出于调试目的,我只是使用相同的on change监听器,而不管状态如何。因此,无论我打开还是关闭它,它都运行相同的函数。
我的问题是,有时候当我打开第一个开关时,第七个开关会被打开,当我打开第二个开关时,第八个开关会被打开。我做错了什么,但我真的搞不清楚。第6、7和8个开关不能正常工作。
您可以在LCD上看到,当我按顺序打开开关时,它必须给我输出“12345678”。但它没有。相反,它给出“12345112”。
编辑:Emil Adz给出的答案有效。给我输出“12345678”。但我有一个问题。如果我打开switch1,滚动到不可见并向上滚动,开关会重置为OFF。为什么会这样?
![Wireless Controller Screenshot](https://istack.dev59.com/M7VhN.webp)
![Wireless Controller Screenshot](https://istack.dev59.com/6k9WW.webp)
![LCD Output](https://istack.dev59.com/biZ4s.webp)
public class DevListAdapter extends ArrayAdapter<Devices>{
Context context;
int layoutResourceId;
Devices data[] = null;
private TextView txt = null;
public DevListAdapter(Context context, int layoutResourceId, Devices[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("WCAM","GetView");
View row = convertView;
DeviceHolder holder = null;
Devices devices = data[position];
String id = devices.id;
Log.d("WCAM","Inflator");
if(row == null)
{
Log.d("WCAM","True");
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new DeviceHolder();
holder.devTxt = (TextView)row.findViewById(R.id.devdesc);
holder.nameTxt = (TextView)row.findViewById(R.id.devname);
holder.toggleSwitch = (Switch)row.findViewById(R.id.toggleswitch);
holder.txt = (TextView) row.findViewById(R.id.debug);
final int i;
if(id.matches("1")) {
i = 0x31;
}
else if(id.matches("2")) {
i = 0x32;
}
else if(id.matches("3")) {
i = 0x33;
}
else if(id.matches("4")) {
i = 0x34;
}
else if(id.matches("5")) {
i = 0x35;
}
else if(id.matches("6")) {
i = 0x36;
}
else if(id.matches("7")) {
i = 0x37;
}
else {
i = 0x38;
}
holder.toggleSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Control._service.write(i);
}
});
row.setTag(holder);
}
else
{
Log.d("WCAM","False");
holder = (DeviceHolder)row.getTag();
}
holder.devTxt.setText(devices.dev);
holder.nameTxt.setText(devices.name);
holder.txt.setText(id);
return row;
}
static class DeviceHolder
{
TextView devTxt;
TextView txt;
TextView nameTxt;
Switch toggleSwitch;
}
}
devices是Devices.java对象的一个实例
public class Devices {
public String dev;
public String name;
public String id;
public Devices(){
super();
}
public Devices(String _id, String dev, String name) {
super();
this.dev = dev;
this.name = name;
this.id = _id;
}
}
Control._service.write(i);
是Control
活动中的一个方法,通过蓝牙将数据发送到微控制器。 - XpleriaisChecked()
是什么?我该如何实现它? - Xpleria