2016-05-21 3 views
0

У меня есть некоторые SwitchCompat в моей деятельности, я поставил OnCheckedChangeListener к одному из них, но (с помощью SharedPreferences), каждый раз, когда я начинаю активность, действие OnCheckedChangeListener является выполняется независимо от того, включено ли оно или выключено (что очень плохо для производительности, поскольку действие включено для запуска сценария оболочки и отображения SnackBar, так как требуется некоторое время).Android - действие SwitchCompat OnCheckedChangeListener работает каждый раз, когда деятельность начала

Вот небольшой фрагмент кода ...

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 
     //Private stuffs... 
     SwitchCompat play; //and many others 
     public static final String PREFS_NAME = "SwitchButton"; 

     protected void onCreate(Bundle savedInstanceState) { 
     // ... 
     play = (SwitchCompat) findViewById(R.id.play_switch); 
     play.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        Shell.SU.run("sh /data/data/br.com.packagename/play_on"); 
        Snackbar snack_play_on = Snackbar.make(play, R.string.play_on, Snackbar.LENGTH_SHORT); 
        snack_play_on.show(); 

        SharedPreferences.Editor editor = getSharedPreferences("SwitchButton", MODE_PRIVATE).edit(); 
        editor.putBoolean("onPlay", true); 
        editor.apply(); 

       } else { 
        Shell.SU.run("sh /data/data/br.com.packagename/play_off"); 
        SharedPreferences.Editor editor = getSharedPreferences("SwitchButton", MODE_PRIVATE).edit(); 
        editor.putBoolean("onPlay", false); 
        editor.apply(); 

        Snackbar snack_play_off = Snackbar.make(play, R.string.play_off, Snackbar.LENGTH_SHORT); 
        snack_play_off.show(); 
       } 
      } 
     }); 
     play.setChecked(sharedPrefs.getBoolean("onPlay", false)); 

Итак ... Каждый раз, когда открытая деятельность (Ot само приложение), который показывает Snackbar и связанные действия в состоянии О из запускается SwitchCompat. Это вызывает слишком много кадров при загрузке Activity (от arround до 230 в четырехъядерном устройстве на 1 ГБ, 1,2 ГГц). Существует более одного коммутатора, четыре или пять.

Что мне делать? Я что-то пропустил или поставил код в неправильном месте? Должен ли я использовать другие методы, такие как OnResume, OnPause и т. Д.?

ответ

0

Вызов setChecked() вызывает слушателя так же, как пользователь щелкнул бы.

я теперь ручка настройки всех флажков, как это:

 play = (SwitchCompat) findViewById(R.id.play_switch); 
     play.setOnCheckedChangeListener(null); 
     play.setChecked(sharedPrefs.getBoolean("onPlay", false)); 
     play.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      ... 
+0

Сэр, я приветствую вас, это работает, как ожидалось. Простое решение, спасибо за его четкое –

 Смежные вопросы

  • Нет связанных вопросов^_^