web-dev-qa-db-fra.com

Comment passer un booléen entre des intentions

Je dois transmettre une valeur booléenne à l'intention et revenir en arrière lorsque le bouton de retour est enfoncé. L'objectif est de définir le booléen et d'utiliser un conditionnel pour empêcher plusieurs lancements d'une nouvelle intention lorsqu'un événement onShake est détecté. J'utiliserais SharedPreferences, mais il semble qu'il ne joue pas Nice avec mon code onClick et je ne sais pas comment résoudre ce problème. Toute suggestion serait appréciée!

public class MyApp extends Activity {

private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    mSensorListener = new ShakeEventListener();
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensorManager.registerListener(mSensorListener,
        mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
        SensorManager.SENSOR_DELAY_UI);


    mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {

      public void onShake() {
             // This code is launched multiple times on a vigorous
             // shake of the device.  I need to prevent this.
            Intent myIntent = new Intent(MyApp.this, NextActivity.class);
            MyApp.this.startActivity(myIntent);
      }
    });

}

@Override
protected void onResume() {
  super.onResume();
  mSensorManager.registerListener(mSensorListener,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
      SensorManager.SENSOR_DELAY_UI);
}

@Override
protected void onStop() {
  mSensorManager.unregisterListener(mSensorListener);
  super.onStop();
}}
18
Carnivoris

avoir une variable membre privée dans votre activité appelée wasShaken.

private boolean wasShaken = false;

modifiez votre onResume pour définir ce paramètre sur false.

public void onResume() { wasShaken = false; }

dans votre écouteur onShake, vérifiez si c'est vrai. si c'est le cas, revenez tôt. Ensuite, définissez-le sur true.

  public void onShake() {
              if(wasShaken) return;
              wasShaken = true;
                          // This code is launched multiple times on a vigorous
                          // shake of the device.  I need to prevent this.
              Intent myIntent = new Intent(MyApp.this, NextActivity.class);
              MyApp.this.startActivity(myIntent);
  }
});
6
vol

Définir l'intention supplémentaire (avec putExtra):

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("yourBoolName", true);

Récupérer l'intention supplémentaire:

@Override
protected void onCreate(Bundle savedInstanceState) {
    Boolean yourBool = getIntent().getExtras().getBoolean("yourBoolName");
}
72
citizen conn

Voici comment vous le faites à Kotlin:

val intent = Intent(this@MainActivity, SecondActivity::class.Java)
            intent.putExtra("sample", true)
            startActivity(intent)

var sample = false
sample = intent.getBooleanExtra("sample", sample)
println("sample")

Échantillon de sortie = vrai

0
Aqua Freshka