(一) 全局变量的使用:
android studio 在 Activity 和 Fragment 中传递变量方法:
新建一个数据类:WholeData.java
public class WholeData extends Application {
private boolean isClicked;
public boolean getClick(){
return this.isClicked;
}
public void setClick(boolean Click){
this.isClicked= Click;
}
}
在 AndroidMainifest.xml 文件的application部分加入语句:
android:name=".WholeData"
在activity中实例化:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Data app = (Data)getApplicationContext();
clickedButton = (ToggleButton)findViewById(R.id.click_button);
CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
app.setClick(true);
}
else{
app.setClick(false);
}
}
};
clickedButton .setOnCheckedChangeListener(listener);
}
下面在Fragment中调用WholeData类中的全局变量:
final Data app = (Data) getActivity().getApplicationContext();
boolean clickstate = app.getEnhance();
当然也可以在其他activity中调用该全局变量:
WholeData data= (WholeData) getApplicationContext();
boolean ckickstata = data.getClick();
(二)保存状态值到xml文件中方法
上述全局变量的使用可以在软件运行中起作用,当软件重启时,全局变量便会恢复到初始值,此时,如果想让软件重启也不会影响到某个变量的值,则可以考虑将该值放到一个文件中。写入方法为:
/* 将状态存放到xml文件中
*/
public void registerStateWrite(){
SharedPreferences sf;
Context context = this;
sf = context.getSharedPreferences("isReg", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sf.edit();
editor.putString("RegState", "true");
editor.commit();
}
getSharedPreferences有两个参数,第一个参数是存储的名称,第二个参数是文件的打开方式,MODE_PRIVATE表示该应用程序私有,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE是表示全局读或写权限,MODE_MULTI_PROCESS表示可以跨进程访问。
当需要获取该值时的方法为:
Context context = this;
SharedPreferences sp = context.getSharedPreferences("isReg", Context.MODE_PRIVATE);
String Reg_State = sp.getString("RegState", "false");
当然,进行读写操作时,需要赋给相应的权限:
(三) 实例应用:
根据状态值的情况选择进入不同的界面中:
public class TurnOn extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.turnon);
Context context = this;
SharedPreferences sp = context.getSharedPreferences("isReg", Context.MODE_PRIVATE);
String Reg_State = sp.getString("RegState", "false");
if(Reg_State.equals("true")){
Intent intent =new Intent(TurnOn.this,MainActivity.class);
startActivity(intent);
}
else{
Button register_bt=(Button)findViewById(R.id.register_bt);
register_bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent =new Intent(TurnOn.this,Register.class);
startActivity(intent);
}
});
}
}
}
程序中涉及到的活动页都需要在 AndroidMainifest.xml 文件的application进行声明:
参考:
https://blog.csdn.net/wirelessqa/article/details/8589230
https://blog.csdn.net/feiyangxiaomi/article/details/9966215
https://blog.csdn.net/qq_35980005/article/details/78380764
https://www.cnblogs.com/2010wuhao/p/4681899.html
https://blog.csdn.net/bestone0213/article/details/43639919
https://blog.csdn.net/baidu_31093133/article/details/51476726