【发布时间】:2018-06-02 21:40:49
【问题描述】:
我目前面临的问题是从我的活动类中获取值。这是我获取我的用户输入并将其传递给我的播放器以决定应该发生什么的地方。
我想知道在活动类和 onCreate 中都有一个构造函数是否有意义?我并不真正理解其中的区别,但是我知道如果我在类中创建一个构造函数并在构造函数中设置变量的值,它会传递该变量。如果我没有构造函数,则该类将 0(null) 返回到我的 Player 类。我将尽可能少地包含并尝试解释我的意思,因为我发现没有示例很难解释。
Game.java |活动类
public class Game extends Activity implements SensorEventListener{
private int yDirection, xDirection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this));
}
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
yDirection = 1;
break;
case MotionEvent.ACTION_UP:
yDirection = 2;
break;
}
return true;
}
public int getyDirection() {
return yDirection;
}
}
Player.java
public class Player {
Game userInput;
public Player(Context context){
userInput = new Game();
}
}
我没有包含我调用它的部分,但是如果我在 Player 类中调用 Game.java 的值,它将返回 0(null) 但是如果我记录变量名并从 Game.java 类查看它这将是正确的值。
如果我保持播放器类相同但更改 Game.java 类如下p>
Game.java |活动类
public class Game extends Activity implements SensorEventListener{
private int yDirection, xDirection;
public Game(){
yDirection = 5;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this));
}
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
yDirection = 1;
break;
case MotionEvent.ACTION_UP:
yDirection = 2;
break;
}
return true;
}
public int getyDirection() {
return yDirection;
}
}
感谢所有帮助!
【问题讨论】:
-
不,这没有任何意义。您没有手动实例化活动。在 onCreate 中设置
-
实际上我看到你正在手动实例化活动 - 不要这样做。不只是在这种情况下 - 从不这样做
-
你是什么意思@TimCastelijns,我对编程很陌生,想深入了解,但我还没有。
-
android 系统管理某些组件的生命周期(例如活动)。系统决定何时需要实例化活动。你自己不管理这个。因此,您不应该将构造函数放在活动中,也不应该调用
new Activity() -
是的,您自己管理的常规 Java 类。我认为你应该反过来做。不要问activity的值是什么,而是将值发送给其他类
标签: java android class constructor instance