0

他のレイアウトの子 (linearlayout) 内にレイアウトを設定する必要があります。これを行うには、ルート レイアウトに設定するレイアウトのアクティビティに次のコードを記述します。

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    **setContentView(R.layout.main);**

    /**Define root layout's child where I want to set the layout*/
    LinearLayout inside_menu_view = (LinearLayout)findViewById(R.id.activitycontent);

    /**Inflate this layout and add it to the root layout*/
    LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View this_layout = inflater.inflate(R.layout.main, null);
    inside_menu_view.addView(this_layout);

しかし、この最後の行で NULLPOINTEREXCEPTION を取得していますinside_menu_view.addView(this_layout);

更新 - super.onCreate の後に setContentView() を追加しました

4

2 に答える 2

0

nullまだ電話していないため、この行が返されますsetContentView()

 LinearLayout inside_menu_view = (LinearLayout)findViewById(R.id.activitycontent);

setContentView(R.layout.layout_with_activitycontent);最初に電話する必要があります

ドキュメントから

onCreate(Bundle) で処理された XML から id 属性で識別されるビューを検索します。

戻り値 見つかった場合はビュー、そうでない場合は null。

を使用して、または を使用してまだ xmllayoutファイルを処理していないため、 のようなメソッドを呼び出そうとするとが発生します。setContentView()LayoutInflaterreturn nullNPEaddView()

編集

なぜそのようにしているのかわかりませんが、できません。上記の私のリンクのように、膨張しfindViewById()た 内の a を見つけるためにのみ使用できます。膨張していない他の内部を見つけるために使用することはできません。ViewlayoutViewlayout

そのファイルを使用したい場合は、そのlayoutファイルを入れてください。setContentView()

別のアプローチFragmentsこれを達成するために、 おそらく使用したいと思うでしょう。

これらの使用方法についてはドキュメントを参照してください

または、すべての に含めたい<include>「メニュー」を含めるために使用して、 の内部を表示する必要があるときに切り替えることができます。layoutActivitiesActivitieslayout

レイアウトの再利用についてはこちら

の例<include>layoutたとえば、再利用しmain.xmlたいものActivityがある場合、それを再利用したい で次のようにするだけです。

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="30dp"
    android:background="@drawable/blue">
        <include layout="@layout/main"
        android:id="@+id/main_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
        <!-- other layouts -->
/<RelativeLayout>

あなたのものは明らかに異なりますが、これは私が持っている例です。お役に立てれば。

于 2013-10-31T14:49:51.333 に答える
0

R.layout.main が LinearLayout であるとしましょう:

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

onCreate() で:

LinearLayout layout = (LinearLayout) findViewById(R.id.main_layout);

LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View this_layout = inflater.inflate(R.layout.main_layout, layout, true);

this_layout は自動的にアクティビティのレイアウトに追加されます。

于 2013-10-31T16:42:50.393 に答える