gpt4 book ai didi

java - 从其他类调用时 Getter 返回 0

转载 作者:行者123 更新时间:2023-11-30 09:03:24 24 4
gpt4 key购买 nike

我是 Android 和 Java 的初学者,我刚刚看到了一些在 Java 中使用 getter 和 setter 方法的视频,当我在同一个类中使用 getter 和 setter 方法时效果很好。但是,当我使用 setter 方法从主类设置图像的位置并尝试使用 getter 方法从我的 fragment 类中检索它时,它返回 0。在 stackoverflow 中提出了一个我不明白的类似问题。请帮帮我..我的主要类(class):

 public class Login_Register extends Activity implements OnClickListener {
Login login = new Login();
Register register = new Register();
ImageButton LoginB;
ImageButton RegisterB;

@Override
protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

setContentView(R.layout.login_register);
FragmentManager fmanager = getFragmentManager();
LoginB = (ImageButton) findViewById(R.id.login_button);
RegisterB = (ImageButton) findViewById(R.id.Reg_button);
LoginB.setOnClickListener(this);
RegisterB.setOnClickListener(this);
}

@Override
public void onClick(View v) {

Positions pos = new Positions();
pos.setLIpos(LoginB.getY());
pos.setRIpos(RegisterB.getY());

FragmentTransaction transaction = fmanager.beginTransaction();
switch (v.getId()) {

case R.id.login_button:

transaction.add(R.id.Parent, login, "Loginf");
transaction.addToBackStack("Login");

break;
case R.id.Reg_button:
transaction.add(R.id.Parent, register, "registerf");
transaction.addToBackStack("registerf");

break;
default:
break;
}
transaction.commit();

// TODO Auto-generated method stub

}


}

我的 fragment 类:

public class Login extends Fragment implements OnGlobalLayoutListener {
EditText UN, Pass;
View loginimage, loginusing, loginlayout;

// Login_Register Lg=new Login_Register();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View login = inflater.inflate(R.layout.login, container, false);
// TODO Auto-generated method stub
UN = (EditText) login.findViewById(R.id.UsernameL);
Pass = (EditText) login.findViewById(R.id.PassswordL);
loginimage = login.findViewById(R.id.LoginImage);

loginusing = login.findViewById(R.id.loginusing);
loginlayout = login.findViewById(R.id.LoginLayout);
loginimage.getViewTreeObserver().addOnGlobalLayoutListener(this);
UN.getBackground().setAlpha(50);
Pass.getBackground().setAlpha(50);
Positions poss=new Positions();
float f=poss.getLIpos();
ObjectAnimator.ofFloat(loginusing, View.ALPHA, 0,1).setDuration(1000).start();

return login;
}
}

类有 setter 和 getter 方法:

public class Positions {
private float LIpos=0;
private float RIpos=0;

public Positions() {
// TODO Auto-generated constructor stub
}
public float getLIpos() {
Log.i("allalalla", ""+LIpos);
return LIpos;
}
public void setLIpos(float lIpos) {
LIpos = lIpos;
}
public float getRIpos() {
return RIpos;
}
public void setRIpos(float rIpos) {
RIpos = rIpos;
}
}

最佳答案

在获得 float 之前,您需要实例化您的类。这将创建一个默认类,其 float 初始化为 0。

Positions poss=new Positions();
float f=poss.getLIpos();

如果您想在此类的不同实例之间保存 float ,则将 float 设置为静态:

private static float LIpos;
private static float RIpos;

或者,您可以保留对保存 float 的实例的引用并将其传递给您的 fragment ,或者您的 fragment 可以直接从您的 Activity 中获取该实例:

public Position pos;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
@Override
public void onClick(View v) {
pos = new Positions();
...
}

然后在您的 fragment 中获取位置元素并获取 float :

@Override
public void onActivityCreated(Bundle savedInstanceState) {
...
float LIpos = ((Login_Register)getActivity()).pos.getLIpos();
...
}

关于java - 从其他类调用时 Getter 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com