android - 使用文本条目中的数据动态地将行添加到表中

时间:2011-12-09 05:46:04

标签: android tablelayout

我正在尝试从文本条目中捕获数据并将数据添加到表格布局并刷新布局。单击“添加”按钮时,会弹出一个带有文本字段的对话框。输入任何内容并单击“确定”后,它应该创建一个新行并刷新视图。

<TableLayout android:id="@+id/table"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:background="#f7ad5d"
             android:weightSum="1">

    <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tableRow1">
        <Button android:layout_width="100px" android:text="Add" android:textSize="13px" android:layout_height="50px" android:id="@+id/add_button"></Button>
    </TableRow>
    <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tableRow2">
        <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:text="  My List"></TextView>
    </TableRow>

</TableLayout>

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button addBtn = (Button) findViewById(R.id.add_button);
    addBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog();
        }
    });
}

    private void update() {
    TableLayout table = (TableLayout)findViewById(R.id.table);
    TableRow tr = new TableRow(this);
    tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

    TextView tv = new TextView(this);
    tv.setText("New Entry");
    tr.addView(tv);

    table.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}


    /**
 * Show a dialog
 */
private void showDialog() {
    final AlertDialog.Builder alert = new AlertDialog.Builder(this);
    final EditText input = new EditText(this);
    alert.setView(input);
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            String value = input.getText().toString().trim();
            Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show();
            finish();
            startActivity(getIntent());
            update();
        }
    });

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.cancel();
        }
    });
    alert.show();
}

目前,我没有从文本条目中捕获数据。我只是尝试使用虚拟数据向表格布局添加虚拟数据,但我不断得到“指定的孩子已经有父。您必须首先在孩子的父母上调用removeView()。”在这一行,

table.addView(tr,new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

我是android开发的初学者。如果有人可以给我一些关于此的提示,那就太棒了。

感谢。

3 个答案:

答案 0 :(得分:1)

请尝试使用此代码进行更新:

private void update() {
    TableLayout table = (TableLayout)findViewById(R.id.table);

    TableRow tr = new TableRow(this);
    tr.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));

    TextView tv = new TextView(this);
    tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
    tv.setText("New Entry");
    tr.addView(tv);

    table.addView(tr);
}

重要的是:

  • TableRow添加到TableLayout使用TableLayout.LayoutParams
  • View添加到TableRow使用TableRow.LayoutParams

答案 1 :(得分:0)

您可以查看this

希望它有所帮助,

干杯

答案 2 :(得分:0)

我认为tr是您正在重复使用的变量。您需要为要添加的每一行创建一个新的TableRow

如果要在XML中执行表和行定义,可以使用以下方法。

首先,创建2个布局文件,一个用于表格,一个用于表格行,例如:

table_header.xml

<TableRow xmlns:android="http://schemas.android.com/apk/res/android" style="@style/TableHeader">
    <TextView style="@style/TableRowHeaderCell" android:text="@string/index" />
    <TextView style="@style/TableRowHeaderCell" android:text="@string/count" />
</TableRow>

table_row.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" style="@style/TableRow">
    <TextView style="@style/NumberInTable" android:id="@+id/textViewIndex" />
    <TextView style="@style/NumberInTable" android:id="@+id/textViewCount" />
</TableRow>

额外的好处是样式可以应用于您的表和行。

从这里开始,为了将行添加到表中,需要使用以下代码初始化表:

_tableLayoutResults = (TableLayout) findViewById(R.id.tableLayoutResults);
final LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.table_header, _tableLayoutResults);

要添加新行,您可以使用以下内容:

// create the row with the xml layout
final View row = inflater.inflate(R.layout.table_row, null);

// set values in row
((TextView)row.findViewById(R.id.textViewIndex)).setText("someText");

// finally add the row
_tableLayoutResults.addView(row);