2014-02-13 66 views
0

当前尝试从其他活动添加布局(box.xml)到我的主布局(activity_main.xml),但无法正确执行此操作。这里是什么,我试图做一个例子:Android:将布局添加到其他活动的布局

(注:为简单起见移除PARAMS)

activity_main.xml中

<FrameLayout> 
    <ScrollView> 
     <LinearLayout> 

      <!--include layout="@layout/box"--> 

     </LinearLayout> 
    </ScrollView> 
</FrameLayout> 

box.xml

<TableLayout> 
    <TableRow> 
     <TextView/> 
     <ImageView/> 
    </TableRow> 
    <TableRow> 
     <TextView/> 
     <Button/> 
    </TableRow> 
</TableLayout> 

CreateNewBoxActivity.java

(注:我MainActivity.java调用startActivity(新意图(这一点,CreateNewBoxActivity.class)))

public class CreateNewBoxActivity extends Activity { 

    private ImageButton mFinish; 
    ... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_newBox); 

     mFinish = (ImageButton) findViewById(R.id.btn_finish); 

     mFinish.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) 
     { 

      //add box.xml where <include layout> is located in activity_main.xml 

      finish(); //close this activity and back to main activity to see 
         //added box layout 
     } 
     }); 
     ... 

    } 
} 

感谢如何添加此布局的任何帮助!不确定解决这个问题的最佳方法。

+0

你**有**以编程方式做它,或者你可以将它添加到您的XML? – codeMagic

+0

为什么不把它添加到XML和切换可见性? –

+0

@codeMagic:我想以编程方式添加这些框以使动态框添加更好的用户控制。除非用户想要创建一个新的盒子,否则我根本不需要盒子。 –

回答

0

你会想要使用LayoutInflater来膨胀box.xml。确保你有idLinearLayout,你想添加box.xml。该充气与layout

LinearLayout ll = (LinearLayout) findViewById(R.id.llId); 

那么你可以使用addView到箱layout添加到您的LinearLayout

See this answer for a more detailed example

编辑

经过进一步的讨论中,OP希望在第二Activity添加从layout某些元件在第一Activity使用的layout。通过使用startActivityForResult()并将数据传回第一个Activity可以更轻松地完成此操作。

然后,在第一Activity适当layoutonActivityResult()可以使用前面提到的方法被添加到原始layout(充气和主叫addView())。

如何处理数据以及需要添加的内容完全取决于开发人员如何处理这些数据。可以将数据添加到来自第二个Activity的模型类中,然后在onActivityResult()中检查并添加,或者这种相同的方法可以检查通过setResult()传回的Intent数据。

Intent Docs包含一个示例以及将数据传回的方法。

This answer有一个使用startActivityForResult()并传回Intent数据的简单示例。

+0

当我充气我的box.xml,我传入什么ViewGroup参数? TableLayout box =(TableLayout)inflater.inflate(R.layout.box,?); –

+0

将'null'或'ViewGroup'附加到。我认为[这个答案](http://stackoverflow.com/questions/5026926/making-sense-of-layoutinflater)解释得很好。 – codeMagic

+0

我在LinearLayout上收到一个nullpointerException,是因为这个布局位于我的activity_main.xml中?我能够膨胀我的box.xml(通过使用调试器),但似乎无法将该视图添加到我的线性布局 –