2012-10-15 59 views
0

编辑:正如布卢默指出的,我并没有将这些项目添加到表格中,所以这个问题的出现只是因为我粗心大意,并没有看到我的错误。动态更新TableLayout

我想创建一个动态的TableLayout,因为我必须从服务器接收结果并根据结果添加行,但表并未更新。 (另外,TableLayout已经有1个最初的行,标题行)。

这是我的代码:

Room[] rooms = State.rooms; 
    TableLayout tblBookDetails = (TableLayout) findViewById(R.id.tblbookdetails); 
    for(int i = 0; i < rooms.length; i++) { 
     TableRow tr = new TableRow(this); 
     tr.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
     LayoutParams layout_wrapwrap = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     layout_wrapwrap.rightMargin = 10; //TODO: Convert into DP 
     Resources res = getResources(); 

     TextView txt1 = new TextView(this); 
     txt1.setLayoutParams(layout_wrapwrap); 
     txt1.setTextColor(res.getColor(android.R.color.black)); 
     txt1.setText(rooms[i].name); 
     TextView txt2 = new TextView(this); 
     txt2.setLayoutParams(layout_wrapwrap); 
     txt2.setTextColor(getResources().getColor(android.R.color.black)); 
     txt2.setText(rooms[i].price + " " + rooms[i].currency); 
     EditText edit1 = new EditText(this); 
     edit1.setLayoutParams(layout_wrapwrap); 
     //Must use deprecated method, since support library does not provide for this. 
     edit1.setBackgroundDrawable(res.getDrawable(android.R.drawable.edit_text)); 
     edit1.setEms(3); 
     edit1.setInputType(InputType.TYPE_CLASS_NUMBER); 
     EditText edit2 = new EditText(this); 
     edit2.setLayoutParams(layout_wrapwrap); 
     //Must use deprecated method, since support library does not provide for this. 
     edit2.setBackgroundDrawable(res.getDrawable(android.R.drawable.edit_text)); 
     edit2.setEms(3); 
     edit2.setInputType(InputType.TYPE_CLASS_NUMBER); 
     Spinner spinner = new Spinner(this); 
     layout_wrapwrap.rightMargin = 0; 
     spinner.setLayoutParams(layout_wrapwrap); 

     Integer[] numbers = new Integer[rooms[i].count]; 
     for(int j = 0; j < numbers.length; j++) { 
      numbers[j] = i + 1; 
     } 
     ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(
       BookActivity.this, R.layout.spinner_textview, numbers); 
     spinner.setAdapter(adapter); 
     tblBookDetails.addView(tr); 
    } 
    //Another exquisite beauty of Java. 
    Log.d("USR", Integer.valueOf(tblBookDetails.getChildCount()).toString()); 
    tblBookDetails.invalidate(); 
    tblBookDetails.refreshDrawableState(); 

为了防止任何混乱,客房[]数组只是一个简单的属性保持器类。 此代码看起来非常复杂,并且表不更新。我在互联网上搜索了很多,我找不到解决这个问题的办法。

预先感谢您。

回答

1

我看到你在哪里添加trtblBookDetails,但我没有看到任何地方,你把txt1txt2edit1等在tr。尝试将这些视图添加到该行,我认为这应该让你在那里,因为现在你似乎增加了TableRow,但没有什么。

+0

你是完全正确的;当时我还在最后一个小时,我没有注意到这一点。 – TotoTitus