【问题标题】:How to dynamically remove a TableRow in android如何在android中动态删除TableRow
【发布时间】:2013-12-27 10:47:21
【问题描述】:

在我的程序中,我动态添加了一个 TableRow,每行有 2 个 TextView 和一个 Button。单击按钮时,我想删除该行。

这是我用来动态制作 TableRows 并将它们添加到 TableLayout 的代码:

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

    // Show the Up button in the action bar.
    setupActionBar();
    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    ArrayList <Item> items = (ArrayList <Item>) bundle.getSerializable("array");
    TableLayout layout = (TableLayout) findViewById(R.id.tl);




    for(int i=0; i<items.size(); i++)
    {

        Item item = items.get(i);

        TextView name = new TextView(this);
        TextView price = new TextView(this);
        Button delete = new Button(this);
        delete.setText("Delete");
        delete.setOnClickListener(click);
        row = new TableRow(this);
        TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
         row.setLayoutParams(lp);

        name.setText(item.getName());
        price.setText(Double.toString(item.getPrice()));
        row.addView(name);
        row.addView(price);
        row.addView(delete);

        layout.addView(row, i);


    }





}

如何实现 OnClickListener 以便删除删除按钮所在的相应行?

【问题讨论】:

  • 你有没有尝试过?有什么问题?
  • 我不知道如何让按钮所在的行被删除

标签: java android


【解决方案1】:

如下更新您的代码:

final TableLayout layout = (TableLayout) findViewById(R.id.tableLayout);

for(int i=0; i<items.size(); i++) {

    Item item = items.get(i);

    final TableRow row = new TableRow(this);
    TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
    row.setLayoutParams(lp);

    TextView name = new TextView(this);
    TextView price = new TextView(this);
    Button delete = new Button(this);
    delete.setText("Delete");
    delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            layout.removeView(row);
        }
    });

    name.setText(item.getName());
    price.setText(Double.toString(item.getPrice()));
    row.addView(name);
    row.addView(price);
    row.addView(delete);

    layout.addView(row, i);
}

我添加了 onClickListenerrowlayout 是最终变量。这行得通!

【讨论】:

  • String item = items.get(i); Items 是一个带有我创建的项目对象的数组列表,可以将其存储在 String 值中吗?
  • 谢谢!我怎么给你代表?这是我的第一篇文章。通常我会在 reddit 上的 /r/learnprogramming 发帖!
  • 只需将其标记为已回答。 (绿勾)所以有同样问题的任何人都可以寻求帮助。
  • 最后一件事。这将从视图中删除 tablerow,但我将如何从 ArrayList 中删除该项目?
  • 将它们设为final,如下所示:final ArrayList &lt;Item&gt; items = ...final Item item = items.get(i);。然后在onClick里面,去掉行后,做items.remove(item)
【解决方案2】:

TableLayout继承自ViewGroup,所以removeView(View view)removeViewAt(int index)removeAllViews()等方法都可以正常使用。

要设置您的 onClickListener,例如:

Button delete = new Button(this);
delete.setText("Delete");
delete.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // Use getParent() to get the parent view which will be a LinearLayout
        // (A TableLayout is made up of LinearLayouts representing each row)
        // You can then use indexOfChild(View child) to get the index of the 
        // LinearLayout child in the TableLayout
    }
});

【讨论】:

  • 我将如何获取将要删除的行的索引?
猜你喜欢
  • 2016-08-14
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
相关资源
最近更新 更多