我是 Android 应用程序编程新手。 如何更改按钮方法(或任何方法)内的变量(布尔)
这只是一个例子:
package com.example.test1;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.renderscript.Sampler;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btn1,btn2;
Boolean player1is = true;
TextView controllview;
TextView controllview2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1= findViewById(R.id.button1);
btn2 = findViewById(R.id.button2);
controllview=findViewById(R.id.controll1);
controllview2=findViewById(R.id.controll2);
if(player1is){
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
player1is = false;
controllview.setText(String.valueOf(player1is));
Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show();
}
});
}else {
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
player1is = true;
controllview.setText(String.valueOf(player1is));
Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show();
}
});
}
controllview2.setText(String.valueOf(player1is));
}
}
如果我运行此代码,
controllview
会发生变化,但显示controllview2
全局值的player1is
不会改变。
我还尝试用单独的方法更改值,例如:
public void changebool(Boolean c) {
player1is= c;
}
然后从 onclick-method 中使用所需的值调用它,但它具有相同的效果。
我知道,我在这里遗漏了一个非常基本的点,但我找到的例子并不令人满意(或者我搜索的方式错误)。
我计划做的是,每个“玩家”(在一个已经运行的、更复杂的应用程序中 - 除了这个小问题)都可以交替按下按钮。
还尝试使用开关或向相应 XML 中的文本视图写入和读取值。
我希望这两个按钮能够交替工作。
使用
java.util.concurrent.atomic.AtomicBoolean
可以解决这个问题