Java 如何从onClick中传递参数

Java 如何从onClick中传递参数,java,android,Java,Android,Android Studio新手。我正在创建一个用于练习的应用程序项目,并尝试创建一个菜单活动。我想测试一下,看看我是否可以通过菜单UI静音和隐藏文本(分数)的显示。我可以使用Intent在活动之间来回传递值,并且可以使用这些值在整个应用程序中打开和关闭功能 我不知道如何使用按钮和鼠标来更改变量,以便通过Intent传递它。我只看到它是在onClick里面完成的。我正在尝试更改onClick之外的变量 示例代码: public class Menu extends AppCompatAc

Android Studio新手。我正在创建一个用于练习的应用程序项目,并尝试创建一个菜单活动。我想测试一下,看看我是否可以通过菜单UI静音和隐藏文本(分数)的显示。我可以使用Intent在活动之间来回传递值,并且可以使用这些值在整个应用程序中打开和关闭功能

我不知道如何使用按钮和鼠标来更改变量,以便通过Intent传递它。我只看到它是在onClick里面完成的。我正在尝试更改onClick之外的变量

示例代码:

    public class Menu extends AppCompatActivity {

    private boolean soundOn = true;
    private Button isSoundOn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    isSoundOn = findViewById(R.id.isSoundOn_button);

    isSoundOn.setOnClickListener(v -> {
         soundOn = false;
    });
现在,当我尝试访问soundOn参数并通过Intent将其传递给另一个活动时,该值保持为true,在单击按钮后,该值不会更改

我确实想出了一个技巧,我可以使用intent并将值传递给同一个活动,如下所示:

    soundOff.setOnClickListener(v -> {
    Intent intent = new Intent(Menu.this, Menu.class);
    intent.putExtra("soundOn", false);
    startActivity(intent);
这会在单击按钮后重新加载活动,使其看起来好像在运行时发生了故障,但我认为可以通过更改过渡动画来解决此问题…我认为。然而,这似乎是一种笨拙的方法,尤其是在菜单活动中,可能有许多设置需要编辑(声音、分数、语言、计时器、颜色、背景等)

我知道我可以让onClick返回到原始活动,但我想创建一个菜单,在这里我可以进行多个选择,然后将它们全部传递回原始活动

我希望这是有意义的,我知道这是相当基本的,但我是新的,我的搜索一直未能产生一个解决方案。谢谢

现在,当我尝试访问soundOn参数并通过 对于另一个活动,该值保持为真,不会更改 单击按钮后

让我们从跟踪
soundOn

  • 首次启动菜单活动时
    soundOn=true
  • 当单击isSound按钮时,
    soundOn=false
  • 当MenuActivity由于意图再次启动时,这是因为这一行

  • 如果您正在对同一活动执行意图,则应使用
    onCreate
    方法检索您的意图:

    isSoundOn = intent.getBooleanExtra("soundOn", true) //true is the default parameter in case intent does not contain that key;
    
    这样,你总是检查你的意图,以防你需要它

    您还需要在意图中使用您的变量;现在,您总是将其设置为false:

      soundOff.setOnClickListener(v -> {
                Intent intent = new Intent(Menu.this, Menu.class);
                intent.putExtra("soundOn", soundOn);
                startActivity(intent);
      }
    

    还有其他解决方案,例如:您可以使用
    SharedReferences
    来持久化您的值,然后调用
    this。重新创建
    以重新创建活动并避免使用意图。然后,您可以在
    onCreate
    方法上检索您的
    SharedReferences
    值,以执行任何您想执行的操作。

    intent.getBooleanExtra(“”)
    这可能会导致应用程序在首次启动时崩溃launch@SwapnilPadaya不,不行。这就是为什么在onCreate()中找不到默认的param.intent变量,是的,如果找不到键,则默认值为
    True
    。但是在你的解决方案中,找不到
    intent
    本身。我要说的是
    intent
    变量本身,它甚至没有定义,所以它会崩溃。谢谢你,Nacho-SharedReferences似乎就是我要搜索的。我刚刚观看了一段YouTube视频,并将其集成到我的练习应用程序中,它似乎起了作用。再次感谢你!androidstudio只是一个IDE,帮助您编写android代码,因此,除非您特别询问IDE的某个功能,否则在您的问题中不需要使用标签或引用它
    private boolean soundOn = true;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        Intent intent = getIntent();
        if(intent != null) { //  we need to get this cause when we first start our app we dont start it with any intents
            soundOn = intent.getExtra("soundOn");
        }
    }
    
    isSoundOn = intent.getBooleanExtra("soundOn", true) //true is the default parameter in case intent does not contain that key;
    
      soundOff.setOnClickListener(v -> {
                Intent intent = new Intent(Menu.this, Menu.class);
                intent.putExtra("soundOn", soundOn);
                startActivity(intent);
      }