У меня есть эта кнопка переключения в моей активности, которая указывает «Открыть» (если это правда) или «Закрыто» (если оно ложно). Я применил метод setOnCheckedChangeListener, чтобы изменить в моей базе данных статус кнопки переключения.Проблемы с изменением статуса кнопки переключения в Android
В этой части моего кода изменить статус кнопки переключения, когда кто-то нажимает на нее:
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(TabLayoutScreenActivity.this);
alertDialog.setMessage("Have you updated today's menu?");
alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
callServiceToOpenBistro();
Toast.makeText(getApplicationContext(), "Your Bistro is now open", Toast.LENGTH_SHORT).show();
OpenClose.setText("Open");
mySwitch.setChecked(true);
dialog.cancel();
}
});
alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "Please updated in order to open your Bistro", Toast.LENGTH_SHORT).show();
OpenClose.setText("Closed");
mySwitch.setChecked(false);
dialog.cancel();
}
});
alertDialog.show();
} else {
callServiceToOpenBistro();
OpenClose.setText("Closed");
}
}
});
И в этой части моего кода, я проверяю в моей базе данных, если данные о кнопке переключения хранится в моей базе данных является истинным или ложным (открыто или закрыто):
private void callServiceToCheckStatus() {
new VolleyHelper(this).get("current_status/" + PrefernceHelper.getString(this, Commons.Constants.USER_ID), null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("bistro_status");
String status = "",flag = "",opHours = "";
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
status = jsonObject.getString("status");
}
if (status.equals("Online")){
OpenClose.setText("Open");
mySwitch.setChecked(true);
} else if (status.equals("Offline")){
OpenClose.setText("Closed");
mySwitch.setChecked(false);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
}
проблема заключается в том, что в методе callServiceToCheckStatus, после получения статуса в моей базе данных я изменить кнопку переключения истинным (если она уже открыта) или false (если он хранится в закрытом состоянии). Но когда я использую «setChecked», он вызывает метод setOnCheckedChangeListener. И это не то, что я действительно хочу.
Есть ли способ сделать это по-другому? Измените статус кнопки переключения без вызова setOnCheckedChangeListener или, возможно, используйте прослушиватель, который проверяет, был ли нажат переключатель, вместо проверки, изменился ли его статус (setOnCheckedChangeListener)?
Возможный дубликат [Изменить значение Checkbox, не вызывая onCheckChanged] (http://stackoverflow.com/questions/15523157/change -checkbox-value-without-triggering-oncheckchanged) – cascal