2011-12-26 6 views
0

私がポートレートモードでアプリを起動すると、正常に動作します。nullPointerException on setLayoutParams

しかし、風景モードで起動すると、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

(..)findViewByIdからそれを再初期化しようとルックス、あなただけのアンドロイドmainfest.xmlに言及する必要があり、そのアンドロイド:configChanges = "orientation"と同じ名前のXMLファイルとすべてのIDが同じであっても、リソースレイアウトの別のフォルダを作成すると、アンドロイドはレイアウトを自動的に横または縦に変更します。あなたはどんなビューのレイアウトパラメータも変更するためにonconfigchangedを聞く必要はありませんし、横並びに関してlayout-landフォルダに同じ名前の同じxmlファイルを作成することで、プログラム内でonConfigChanged() 。 –

+0

私はちょうど述べたものを試して、それは動作します。しかし、それは動きがオリエンテーションの変更で再起動される**巨大な**欠点を伴います:( – GAMA

+0

いいえ、それは再開できません、あなたはまだonConfigChanged()で何か言及していますか? –

答えて

1

は、プロットオブジェクトがnullであるあなたのように、onConfigChanged()メソッドでは何もする必要はあなたがいけない

+0

働いた しかし間違いは、 'plot =(XYPlot)findViewById(R.id.companyPlot);'の前に 'changeToLandscape()'を呼び出すことです。バツ。 – GAMA

関連する問題