开关状态更改在第一次单击时不起作用



如果我更改任何开关状态,DatabaseReference第一次不会从以前的值更改...如果我再次更改相同的开关状态,它可以完美运行。这是我的代码:

public sigAdapter(Context context, String[] web, Integer[] imageId) {
super(context, R.layout.list, web);
this.context = context;
this.web = web;
this.imageId = imageId;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
DatabaseReference databaseReference1 = database.getReference("data").child(web[position1].replace("/",""));
databaseReference=databaseReference1.child("Switch");
ViewHolder viewHolder=new ViewHolder();
View listItemView = view;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list, parent, false);
viewHolder.txtTitle = (TextView) listItemView.findViewById(R.id.text_view);
viewHolder.imageView = (ImageView) listItemView.findViewById(R.id.image_view);
viewHolder.switch1 = (Switch) listItemView.findViewById(R.id.switch_button);
final ViewHolder finalViewHolder = viewHolder;
viewHolder.switch1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
position1 = (Integer)v.getTag();
finalViewHolder.switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
DatabaseReference databaseReference1=database.getReference("data").child(web[position1].replace("/",""));
DatabaseReference databaseReference2=databaseReference1.child("Switch");
if (isChecked){
databaseReference2.setValue("On");
}else {
databaseReference2.setValue("Off");
}
}
});
}
});
listItemView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder)listItemView.getTag();
}
viewHolder.switch1.setTag(position);
viewHolder.txtTitle.setText(web[position]);
viewHolder.imageView.setImageResource(imageId[position]);
return listItemView;
}

因为您正在OnClickListener中设置OnCheckedChangeListener;所以onCheckChanged()方法仅在第一次单击(而不是在第一次单击(被调用。

只需从一开始就使用OnCheckedChangeListener即可。

viewHolder.switch1 = (Switch) listItemView.findViewById(R.id.switch_button);
switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
position1 = (Integer) buttonView.getTag();
DatabaseReference databaseReference1 = database.getReference("data").child(web[position1].replace("/",""));
DatabaseReference databaseReference2 = databaseReference1.child("Switch");
if (isChecked){
databaseReference2.setValue("On");
} else {
databaseReference2.setValue("Off");
}
}
}

最新更新