android studio 全局变量和变量保存到xml文件的方法及应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/piaoxuezhong/article/details/83899021

(一) 全局变量的使用:

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

当然,进行读写操作时,需要赋给相应的权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

(三) 实例应用:

根据状态值的情况选择进入不同的界面中:

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进行声明:

<activity
      android:name=".Register"
      android:screenOrientation="portrait"/>
<activity
      android:name=".TurnOn"
      android:screenOrientation="portrait"/>

参考:

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

猜你喜欢

转载自blog.csdn.net/piaoxuezhong/article/details/83899021