Android从活动

时间:2015-06-03 15:58:16

标签: java android

我已经创建了一个我遇到的问题的简化示例。我想要的是在点击片段视图中的另一个按钮时为我的片段视图添加一个按钮。

爪哇 MainActivity

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mImageView = (ImageView) findViewById(R.id.imageView);
}


public void addSubmitButton(View view){
    RelativeLayout rLayout = (RelativeLayout) findViewById(R.id.activityLayout);
    RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);
    Button tv1 = new Button(this);
    tv1.setText("Hello");
    tv1.setLayoutParams(lparams);
    rLayout.addView(tv1);
}

XML ActivityMain

<fragment 
   android:id="@+id/fragment"
   tools:layout="@layout/fragment_main" />

XML fragment_main

    <RelativeLayout 
        android:id="@+id/activityLayout"
        tools:context=".MainActivityFragment">


        <Button               
            android:id="@+id/button"
            android:onClick="addSubmitButton" />

    </RelativeLayout>

在上面的代码中,我删除了不相关的代码(如宽度高度等)

当我点击按钮onclick会激活addSubmitButton,然后应用程序崩溃在一个nullpointer上为行rLayout.addView(tv1);在addSubmitButton中。

为什么它为空?

2 个答案:

答案 0 :(得分:1)

我认为,这不是正确的方法。

首先,在活动布局

中的片段视图声明中添加正确的定义
android:name="com.example.android.fragments.MainActivityFragment"

您必须使用片段管理器来查找填充到您的活动中的片段。获得此片段后,您可以获取其视图,在您的情况下为RelativeLayout,然后将所需的Button添加到此视图。

以下内容可能有所帮助:

FragmentManager fm = getFragmentManager();
                fm.findFragmentById(R.id.yourFragmentId).getView().findViewById(R.id.activityLayout)

如果您使用支持片段,请使用getSupportFragmentManager()

答案 1 :(得分:0)

您似乎缺少片段元素中的完全限定名称:

<fragment android:name="com.example.android.fragments.MyFragment"
          android:id="@+id/fragment"
          android:layout_weight="1"
          android:layout_width="0dp"
          android:layout_height="match_parent" />