2016-11-04 5 views
0

У меня есть эта кнопка переключения в моей активности, которая указывает «Открыть» (если это правда) или «Закрыто» (если оно ложно). Я применил метод 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)?

+0

Возможный дубликат [Изменить значение Checkbox, не вызывая onCheckChanged] (http://stackoverflow.com/questions/15523157/change -checkbox-value-without-triggering-oncheckchanged) – cascal

ответ

1

Я думаю, this Решение должно работать на вас.

Вы удаляете слушателя (setOnCheckedChangeListener (null);), называют mySwitch.setChecked(true or false) и прикрепить слушателя снова (mySwitch.setOnCheckedChangeListener(reference of listener))

+0

Я не знал, что смогу это сделать. Большое спасибо! –