2014-02-13 134 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(通過使用調試器),但似乎無法將該視圖添加到我的線性佈局 –