在方法中设置public int变量

时间:2011-11-05 03:27:41

标签: java android eclipse

这是我的代码:

public class MainMenuActivity extends Activity implements OnClickListener {

    public int width;
    public int height;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainmenu);

        Button play = (Button) findViewById(R.id.playbut);
        Button credits = (Button) findViewById(R.id.creditsbut);
        Button help = (Button) findViewById(R.id.helpbut);

        play.setOnClickListener(this);
        credits.setOnClickListener(this);
        help.setOnClickListener(this);

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        width = dm.widthPixels;
        height = dm.heightPixels;       
}

问题是,public int width没有被设置为dm.widthPixels,同样也被设置为height。有什么提示吗?

3 个答案:

答案 0 :(得分:3)

给定的代码应该导致设置属性。如果没有发生,那么必然会有其他事情发生:

  • 也许这个方法没有被调用。
  • 可能dm像素属性的值不是您期望的值。
  • 在方法调用之后,可能还有其他内容正在更改widthheight值。
  • ...
  • 也许您实际运行的代码与您向我们展示的源代码不符...或者您正在查看的实际代码。 (例如,您的构建/部署过程可能有问题。)

如果您感到困惑,请尝试使用调试器运行,并在方法中设置断点。单步执行该方法,并检查所设置的实际值。

答案 1 :(得分:1)

这类问题是为什么公共实例变量通常被认为是不好的做法。你最好将实例变量设为私有,如果需要,可以使用公共getter。这意味着您可以保证在您不知情的情况下没有人更改价值:

public class MainMenuActivity ... {
    private int width;
    private int height;

    public int getWidth() {
        return width;
    }

    // etc
}

如果您进行此更改,那么您可能会立即发现谁正在更改您下面的值 - 无论设置widthheight的值,现在都无法编译。

答案 2 :(得分:0)

this.width = dm.widthPixels;     this.height = dm.heightPixels;

是的,你可以尝试这个,如果它还没有工作,那么你可以尝试通过更改 数据类型的宽度和高度int为double。可能是极限问题。 如果有效,请告诉我。