2014-02-16 58 views
0

我要動態添加錶行到我的佈局,該行會被添加到RelativeLayout的稱爲main_ScrollView_Container添加的TableRow動態和檢索/從EditText上設置,viewtext

我的問題是:

  1. 添加的行堆疊在彼此的頂部,並且按照添加的順序不會低於彼此。
  2. 我怎樣才能檢索添加的行,所以我可以讀/寫的的EditText輸入的TextView輸出每一行的,我已經加入?

我的OnCreate:

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

    // the inflater 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    // the item to inflate 
    RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.main_ScrollView_Container); 
    // the item to inflate with 

    View tableRow = inflater.inflate(R.xml.my_row, relativeLayout, false); 
    relativeLayout.addView(tableRow, 0); 

    tableRow = inflater.inflate(R.xml.my_row, relativeLayout, false); 
    relativeLayout.addView(tableRow, 1); 

    tableRow = inflater.inflate(R.xml.my_row, relativeLayout, false); 
    relativeLayout.addView(tableRow, 2); 

    tableRow = inflater.inflate(R.xml.my_row, relativeLayout, false); 
    relativeLayout.addView(tableRow, 3); 

    // retrieve/set values to the EditText input 
    // retrieve/set values to the TextView output 
} 

我得到這個my_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tableRow" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="20dp" > 

    <EditText 
     android:id="@+id/input" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:ems="10" 
     android:gravity="center" 
     android:hint="@string/input" 
     android:inputType="numberDecimal" /> 

    <TextView 
     android:id="@+id/output" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:gravity="center" 
     android:hint="@string/output" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
</TableRow> 

和我的佈局

<ScrollView 
    android:id="@+id/main_scroll_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <RelativeLayout 
     android:id="@+id/main_ScrollView_Container" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 


    </RelativeLayout> 
</ScrollView> 

回答

2

首先,你或許應該使用R.layout而非R.xml組織和參考你的佈局文件。在你的項目中只有許多 xml資源類型 - 對它們進行子分類是個好主意。

其次,當您撥打relativeLayout.addView(tableRow, 0);時,實際上您在的第0個位置處添加了tableRow(頂部)。另外,由於您正在將這些行添加到RelativeLayout中,所以它們堆疊在一起並不奇怪。您可能需要使用垂直方向的LinearLayout,這樣可以從上到下垂直排列行。

第三,一旦你已經膨脹的排視圖,您可以訪問它的子視圖是這樣的:

View tableRow = inflater.inflate(R.xml.my_row, relativeLayout, false); 
EditText inputBox = (EditText) tableRow.findViewById(R.id.input); 
TextView outputBox = (TextView) tableRow.findViewById(R.id.output); 

記住,你可以調用findViewById任何View訪問它的子視圖 - 提供他們的ID。

+0

不錯,1和2在你的答案我會做。 關於我的第二個問題,我不想在創建它們之後訪問/編輯,我想稍後再做,我想我需要將每個動態添加視圖保存在列表中以便稍後訪問它們? 因爲每一行都有一個名字:@ + id/tableRow和EditText和TextView已經設置了id,那麼我想我總是會得到第一個id在android內部列表中第一個的視圖。 – Kkloe