2016-05-21 12 views
0

Ich habe einige SwitchCompat in meiner Tätigkeit habe ich die OnCheckedChangeListener zu einem von ihnen festgelegt, sondern (mit SharedPreferences), jedes Mal wenn ich die Aktion starten, wird die Aktion von OnCheckedChangeListener ist durchgeführt, unabhängig davon, ob es an oder aus ist (was sehr schlecht für die Leistung ist, wie die On-Status Aktion ist ein Shell-Skript ausführen und zeigen Sie eine SnackBar, wie es einige Zeit dauert).Android - SwitchCompat OnCheckedChangeListener Aktion ausgeführt wird jedes Mal, wenn die Aktivität gestartet wird

ist hier ein kleines Stück Code ...

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)); 

So ... Jedes Mal, wenn ein Öffnen Sie die Aktivität (die App ot selbst), die Snackbar zeigt, und die verknüpfte Aktion auf den Zustand von Der SwitchCompat wird ausgeführt. Dadurch werden beim Laden der Activity zu viele Frames übersprungen (ca. 230 in einem 1 GB, 1,2 GHz Quad-Gerät). Es gibt mehr als einen Schalter, vier oder fünf.

Was soll ich tun? Fehle ich etwas oder stelle ich den Code an die falsche Stelle? Sollte ich andere Methoden wie OnResume, OnPause usw. verwenden?

Antwort

0

Aufruf setChecked() ruft den Listener auf die gleiche Weise auf, die ein Benutzer klicken würde.

Ich behandle jetzt alle Kontrollkästchen wie diese Einrichtung:

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

Sir, ich dich grüße, es funktioniert wie erwartet. Einfache Lösung, danke für die Klarheit –

Verwandte Themen