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