繁体   English   中英

Android 中的 Getter 和 Setter

[英]Getter and Setter in Android

在我的 MainActivity 中,我有一个 Switch 和一个 Button,更改开关状态后,单击按钮后,我想获取开关状态 true/false。 为此,出于未知原因,我实现了 Getter 和 Setter,一旦我设置了值,我总是会出错。

主要活动

 Switch profession = (Switch) findViewById(R.id.profswitch);
profession.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        GetSwitch SP = new GetSwitch();
        SP.setSetClicked(isChecked);
    }
});

Button profButton = findViewById(R.id.btnSwitchNxt);
profButton.setOnClickListener(new View.OnClickListener() {
   @Override
    public void onClick(View v) {
       GetSwitch sw = new GetSwitch();
       boolean setClicked = sw.isSetClicked();
       Log.i("GetSwitch",setClicked+"");

   }
});

获取开关

public class GetSwitch{

    private boolean setClicked;

    public void setSetClicked(boolean setClicked) {
        this.setClicked = setClicked;
        Log.i("SetSwitch",this.setClicked+"");
    }

    public boolean isSetClicked() {
        return setClicked;
    }
}

我在这里做错了什么?

您正在使用不同的 object 来设置和获取值。 您只需要声明一个 GetSwitch object,它必须如下所示。

   GetSwitch SP = new GetSwitch();
   Switch profession = (Switch) findViewById(R.id.profswitch);
   profession.setOnCheckedChangeListener(new 
   CompoundButton.OnCheckedChangeListener() {
       @Override
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {      
           SP.setSetClicked(isChecked);
       } 
   }); 

   Button profButton = findViewById(R.id.btnSwitchNxt);
   profButton.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {      
           boolean setClicked = SP.isSetClicked();
           Log.i("GetSwitch",setClicked+"");
       }
   });

您正在使用相同 class 的两个单独实例来获取相同的属性。 当您更新实例的属性时,更改属于该实例。 你可以这样做:

Switch profession = (Switch) findViewById(R.id.profswitch);
GetSwitch sw = new GetSwitch();
profession.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        sw.setSetClicked(isChecked);
    }
});

Button profButton = findViewById(R.id.btnSwitchNxt);
profButton.setOnClickListener(new View.OnClickListener() {
   @Override
    public void onClick(View v) {
       boolean setClicked = sw.isSetClicked();
       Log.i("GetSwitch",setClicked+"");
   }
});

请参阅此处,我正在获取并设置同一实例的属性,以便它们不会被更改。 您还可以在 class 的构造函数中定义此实例,并使用this.sw引用它们作为一个好习惯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM