如何在意图之间传递布尔值

Posted

技术标签:

【中文标题】如何在意图之间传递布尔值【英文标题】:How to pass a boolean between intents 【发布时间】:2011-07-19 17:41:46 【问题描述】:

当按下后退按钮时,我需要将一个布尔值传递给意图并再次返回。目标是设置布尔值并使用条件来防止在检测到 onShake 事件时多次启动新意图。我会使用 SharedPreferences,但它似乎与我的 onClick 代码不匹配,我不知道如何解决这个问题。任何建议将不胜感激!

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

【问题讨论】:

【参考方案1】:

额外设置意图(使用 putExtra):

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

额外检索意图:

@Override
protected void onCreate(Bundle savedInstanceState) 
    Boolean yourBool = getIntent().getExtras().getBoolean("yourBoolName");

【讨论】:

getIntent() 现已弃用。 @user7856586 你有官方消息说 getIntent 已被弃用吗?【参考方案2】:

在您的活动中有一个名为 wasShaken 的私有成员变量。

private boolean wasShaken = false;

修改您的 onResume 以将其设置为 false。

public void onResume()  wasShaken = false; 

在你的 onShake 监听器中,检查它是否为真。如果是,请早点回来。然后将其设置为 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);
  
);

【讨论】:

【参考方案3】:

这就是你在 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)

输出样本 = true

【讨论】:

以上是关于如何在意图之间传递布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Phonegap iOS 中传递布尔值

Python 在函数之间传递变量(布尔值)

如何将管道中的布尔参数值传递给下游作业?

如何在 Tensorflow 中使用 benchmark_model 时将布尔值传递给占位符?

如何在 URL 中传递 false 的布尔变量

单击表单复选框并传递复选框布尔值时如何在Django中刷新view.py?