【问题标题】:Would it make sense to use a constructor in my activity class? [duplicate]在我的活动类中使用构造函数是否有意义? [复制]
【发布时间】: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


【解决方案1】:

要将值传递给由另一个人启动的活动,您应该使用 Intent:

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);

并以这种方式检索它:

String s = getIntent().getStringExtra("EXTRA_SESSION_ID");

【讨论】:

  • 请不要从您自己的项目中复制与问题无关的粘贴代码。您可能没有注意到,但这里只有 1 个活动,而且它肯定不叫 SignoutActivity
  • 他问“我当前面临的问题是从我的活动类中获取值”,您可能知道,这解决了这个问题。显然,这只是一个例子。
  • 这根本不能解决这个问题,因为另一个类不是活动
  • @TimCastelijns 是对的,我正在尝试将我的活动中的数据传递给我的 Player 的单独类(Player.java 与任何活动无关)
  • 在这种情况下,我建议在活动和游戏类之间使用监听器模式。
猜你喜欢
  • 2020-04-22
  • 1970-01-01
  • 2014-12-27
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2021-02-08
相关资源
最近更新 更多