【问题标题】:NullPointerException using getWindowManager()NullPointerException 使用 getWindowManager()
【发布时间】:2015-08-05 21:56:13
【问题描述】:

为什么 SAMPLE1 代码工作正常而 SAMPLE2 抛出 NullPointerExceptiongetWindowManager() 只能在 onCreate 内部工作吗?我可以做些什么来创建一个返回视图高度并使其可用于所有子类的方法?请帮忙..

SAMPLE1

public class MainActivity extends ActionBarActivity
        {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        final int height = displaymetrics.heightPixels;        
        float imheight= (float) (height*.4);
        int h=Math.round(imheight);

        ImageView im=(ImageView)findViewById(R.id.mainnews1);
        im.getLayoutParams().height = h;
        im.setScaleType(ImageView.ScaleType.FIT_XY);

        }

SAMPLE2

public class MainActivity extends ActionBarActivity
        {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

             ImageView im=(ImageView)findViewById(R.id.mainnews1);
        im.getLayoutParams().height = new MainActivity().heightof();
        im.setScaleType(ImageView.ScaleType.FIT_XY);
    }

    public int heightof()
    {
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        final int height = displaymetrics.heightPixels;
        int width = displaymetrics.widthPixels;
        float imheight= (float) (height*.4);
        int h=Math.round(imheight);
        return h;
    }
        }

【问题讨论】:

    标签: java android


    【解决方案1】:

    您永远不应该调用new MainActivity(),而是尝试传递或使用上下文,例如MainActivity.this

    【讨论】:

    • 你能发帖怎么做吗?
    • 你已经在你的MainActivity 上下文中,所以你可以简单地使用它的任何方法。 new MainActivity().heightof(); 不需要,只有 heightof()this.heightof() 或 MainActivity.this.heightof()` 可以正常工作
    • 你可以从stackoverflow.com/questions/3302177/…阅读更多关于newonCreate的信息
    • 但我无法从静态子类访问,通过这个 im.getLayoutParams().height = new MainActivity().heightof(); ,子类包含一个片段,并且我将高度放在片段中的图像视图中。.显示 NullPointerException 为什么??
    • 在片段中你必须使用getActivity() 来获取你的根目录Activity
    【解决方案2】:

    改变这一行:

    >  im.getLayoutParams().height = new MainActivity().heightof();
    

    到这一行:

    im.getLayoutParams().height = heightof();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2014-08-21
      • 2023-03-29
      相关资源
      最近更新 更多