2016-05-21 13 views
0

を起動するたびに実行されていますオンの状態でアクションがシェルスクリプトを実行し、しばらく時間がかかるので、SnackBarと表示されるため、パフォーマンスには非常に悪いです)。ここでアンドロイド - SwitchCompat OnCheckedChangeListenerアクションは活動は私が私の活動の一部<code>SwitchCompat</code>が、私はそれらのいずれかに<code>OnCheckedChangeListener</code>を設定されているが、(<code>SharedPreferences</code>を使用して)、私は活動を開始するたびに、OnCheckedChangeListenerの作用がある

コードの小片は、スナックバーが示しアクティビティ(アプリ自体をOT)、およびのオン状態へのリンクアクション開くたびに... ...

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

ですSwitchCompatが実行されます。 これは、アクティビティをロードするときにフレームがスキップされる原因となります(1GB、1.2GHzクワッドデバイスではarroundを230にします)。 1つのスイッチ、4つまたは5つ以上があります。

どうすればよいですか?何かが足りないか、コードを間違った場所に置いていますか? 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

卿を、私は期待どおりに動作しますが、敬礼します。シンプルなソリューション、それを明確に保つためにありがとう –

関連する問題