【问题标题】:How to delete a row in TableLayout dynamically如何动态删除 TableLayout 中的一行
【发布时间】:2014-09-03 14:30:42
【问题描述】:

我有一个 TableLayout,我为其动态添加了行。在每一行中都有 2 个元素,其中一个是 TextView,另一个是 Button。当我单击一行中存在的按钮时,应该删除该行.如何在 Android 中做到这一点?如何查找 rowid 以及如何动态删除一行。 谁能帮我解决这个问题。

提前致谢,

【问题讨论】:

标签: android


【解决方案1】:

试试这种方法:

    TableRow tableRow;
    TextView tv;
    Button button;
    //...
    tableRow.addView(tv)
    tableRow.addView(button);


    //somewhere where you want to delete
    ViewGroup parent=button.getParent();
    if(parent instanceof TableRow)
        //do deleting task

【讨论】:

  • 目前我的设计已更改,我正在动态地将 Textview 和复选框作为一行添加到表格中。外面的桌子我有一个按钮。当我单击按钮并且如果在任何行中选中了复选框,则应该删除该特定行。如何知道选中了哪个复选框?因为我需要知道它是 ViewParent 还是 ViewGroup
  • 您需要知道 TableLayout 句柄,并且使用它的句柄可以枚举所有可用的子视图,因此您会知道复选框。正如你所知道的,你可以拥有它的 TableRow
【解决方案2】:

试试这个:

public void onClick(View v) {
      // TODO Auto-generated method stub

      TableRow t = (TableRow) v.getParent();
      TextView firstTextView = (TextView) t.getChildAt(0);
      code = firstTextView.getText().toString();

      System.out.println("code>>>>>>" + code);

      View row = (View) v.getParent();
      // container contains all the rows, you could keep a
      // variable somewhere else to the container which you
      // can refer to here
      ViewGroup container = ((ViewGroup) row.getParent());
      // delete the row and invalidate your view so it gets
      // redrawn
      container.removeView(row);
      container.invalidate();
}

【讨论】:

    【解决方案3】:

    您可以在添加行时分配标签或 ID。然后只需使用该标签/ID 删除该行。

    TableLayout table;  // global access, probably initialized in onCreate()
    
    // initialization, etc.
    

    创建将被添加到 TableLayout 的元素、带有 TextView 和 Button 的 TableRow,然后在将其添加到 TableLayout 之前调用 addDeleteClick(yourButton, uniqueTag)

    // example of adding a text view and a button the the TableLayout
    void addToTableLayout(String text, String uniqueTag) {
        TableRow tr = new TableRow(yourActivity);
        // set the unique tag that will be used when deleting this row
        tr.setTag(uniqueTag);
        // do what you need with the button and textview
        TextView tv = new TextView(yourActivity);
        tv.setText(text);
        Button bt = new Button(yourActivity);
        // add delete click capability to the button
        addDeleteClick(bt, uniqueTag);
        table.addView(tr, new TableLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    }
    
    // Adds the delete on click capability to a button 
    // to delete a row from TableLayout based on its tag
    void addDeleteClick(Button bt, final String tag) {
        bt.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View arg0) {
                Log.d("TableLayout", " deleting row with tag " + tag);
                deleteRow(tag);
            }
    
        });
    }
    
    // delete a row from TableLayout based on its tag
    void deleteRow(String tag) {
        View removedRow = table.findViewWithTag(tag);
        table.removeView(removedRow);
        table.invalidate();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-07
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 2010-11-05
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多