2011-12-26 47 views
0

如果我以縱向模式啓動應用程序,它可以正常工作。nullLoinoutParams上的nullPointerException

但是,如果我將其啓動爲橫向模式,則當我嘗試通過使用setLayoutParams嘗試調整視圖的大小時,它會給出nullPointerException

一段代碼

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.companygraph); 
     Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)) 
       .getDefaultDisplay(); 
     if (display.getWidth() > display.getHeight()) { 
      changeToLandscape(); 
     } 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      changeToLandscape(); 

     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
      changeToPortrait(); 
     } 
    } 

    public void changeToLandscape() { 
//IT GIVES NULLPOINTEREXCEPTION HERE. 
     plot.setLayoutParams(new LinearLayout.LayoutParams(500, 300)); 
    } 

    public void changeToPortrait() { 
//IT GIVES NULLPOINTEREXCEPTION HERE. 
     plot.setLayoutParams(new LinearLayout.LayoutParams(300, 500)); 
    } 

companygraph.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/linearLayout">" 

<com.androidplot.xy.XYPlot 
android:id="@+id/companyPlot" 
android:layout_width="300px" 
android:layout_height="500px" 
title=""/> 
</LinearLayout> 

任何幫助將LIFE-SAVER !!!

+1

你不需要在onConfigChanged()方法做任何事情,你只需要在安卓mainfest.xml提,那機器人:configChanges =「orientation」並在資源佈局中創建另一個文件夾 - 同名的xml文件和所有的id甚至相同,android操作系統將自動更改相應的橫向或縱向佈局。你不需要聽onconfigchanged只更改任何視圖的佈局參數,甚至不需要在程序中提及onConfigChanged(),如果你通過在layout-land文件夾中創建與景觀相同名稱的同一個xml文件。 – 2011-12-26 13:25:44

+0

我試過你剛纔所說的,它的工作原理。但它帶來**巨大的**缺點,活動重新啓動方向變化:( – GAMA 2011-12-27 04:24:47

+0

沒有它不能被重新啓動,你仍然提到onConfigChanged()中的東西?... ...刪除方法..! – 2011-12-27 06:09:24

回答

1

看起來像你的情節對象爲空,則嘗試從findViewById重新初始化(..)

+0

那工作。 但是我正在做的錯誤是在'plot =(XYPlot)findViewById(R.id.companyPlot);'之前調用'changeToLandscape()'。不管怎樣,thn X。 – GAMA 2011-12-26 12:02:12