如何动态地向表格添加行?

时间:2013-08-06 11:13:01

标签: android android-edittext tablelayout

我必须显示一个表,当用户将焦点移动到上一行的最后一个editText时,会添加行。我的第一个方法是创建了2个XML文件,一个tableLayout和一个Tablerow。每当用户需要该行时,我都会用Java来扩充XML文件。除了我无法从我定义tableRow XML的EditText中获取用户输入的值之外,此方法一切正常。我该怎么办。我正在尝试的第二种方法的代码如下:

  public class PurchaseVoucher extends Activity implements OnFocusChangeListener{

AutoCompleteTextView item[]=new AutoCompleteTextView[30];
EditText quant[]=new EditText[30];
EditText rate[]=new EditText[30];
TableLayout main;
TableRow row[]=new TableRow[30];
EditText date;
boolean done;
Button save;
int no=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sale_purchase_vouch);
    main=(TableLayout)findViewById(R.id.tableLayout);

    date=(EditText)findViewById(R.id.Date);
    date.setOnFocusChangeListener(this);
    done=false;
    save=(Button)findViewById(R.id.Save);
    save.setText("Confirm Purchase");

}
@Override
public void onFocusChange(View arg0, boolean arg1) {
    // TODO Auto-generated method stub
    switch(arg0.getId()){

    case R.id.Date:
    if(arg1==false || done==false){
        row[no]=(TableRow)LayoutInflater.from(this).inflate(R.layout.row, null);
    item[no]=new AutoCompleteTextView(this);
    quant[no]=new EditText(this);
    rate[no]=new EditText(this);
    LayoutParams params=new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    item[no].setHint("Enter item");
    quant[no].setHint("Quantity");
    rate[no].setHint("Rate");

    row[no].addView(item[no], params);
    row[no].addView(quant[no], params);
    row[no].addView(rate[no], params);
    main.addView(row[no]);
    no++;
    }
    break;
    }
}

}

通过这种方法,当用户从“日期”EditText失去焦点时,editTexts不会出现。

2 个答案:

答案 0 :(得分:0)

这只是一个例子。

 TableLayout tl = (TableLayout)findViewById(R.id.tl_frmXML);

TableRow tr ;

for(int i=0;i<=10;i++){

tr = new TableRow(this);
TextView tv = new TextView(this);

tv.setText("Test "+i);
tr.addView(tv);
tl.addView(tr);
}

答案 1 :(得分:0)

请参阅以下代码

for (int i = 0; i < Counter; i++) {
        // Inflate your row "template" and fill out the fields.
        TableRow row = (TableRow) LayoutInflater.from(mContext).inflate(R.layout.row_table_layout, null);
        ((ImageView) row.findViewById(R.id.img_drink_place)).setImageResource(R.drawable.img_guest_container);
        ((TextView) row.findViewById(R.id.attendee_name)).setText(bookingList.Attendees.get(i).ConsumerName);


        ((TextView) row.findViewById(R.id.tv_multiple)).setText("x");
        ((TextView) row.findViewById(R.id.tv_attendee_quantity)).setText("" + bookingList.Attendees.get(i).Quantity);


        main.addView(row);
    }