Android动态按钮 - 每行不同的金额

时间:2014-10-30 04:31:26

标签: android button dynamic

我想在每行中添加不同数量的按钮。在每行中说一个随机数量的按钮。行数是一个常量定义。我看过一些教程,到目前为止还有以下代码。这会在每行中生成相同数量的按钮。你能帮忙吗?谢谢。

private void populateButtons() { 
    TableLayout table = (TableLayout) findViewById(R.id.button); 
    for (int row = 0; row != NUM_ROWS; row++) { 
        TableRow tableRow = new TableRow(this); 
        tableRow.setLayoutParams(
                new TableLayout.LayoutParams(
                        TableLayout.LayoutParams.MATCH_PARENT, 
                        TableLayout.LayoutParams.MATCH_PARENT, 1.0f));
        table.addView(tableRow);
        for (int col = 0; col != NUM_COLS; col++){ 
            final int FINAL_COL = col; 
            final int FINAL_ROW = row; 
            Button button = new Button(this); 
            button.setLayoutParams(
                    new TableRow.LayoutParams(
                            TableRow.LayoutParams.MATCH_PARENT, 
                            TableRow.LayoutParams.MATCH_PARENT, 1.0f)); 
            button.setBackgroundResource(R.drawable.button);
            tableRow.addView(button); 
            buttons[row][col] = button; 
        }
    }
}

2 个答案:

答案 0 :(得分:0)

这是因为您对NUM_COLS使用相同的值。

如果你想在每一行中添加不同数量的按钮,那么你应该像这样定义每一行的按钮数量。

int [] NUM_COLS = {2,3,4};

,您的代码就像这样

private void populateButtons() { 
TableLayout table = (TableLayout) findViewById(R.id.button); 
for (int row = 0; row != NUM_ROWS; row++) { 
    TableLayout table = (TableLayout) findViewById(R.id.button1); 
    for (int row = 0; row != NUM_ROWS; row++) { 
        TableRow tableRow = new TableRow(this); 
        tableRow.setLayoutParams(
                new TableLayout.LayoutParams(
                        TableLayout.LayoutParams.WRAP_CONTENT, 
                        TableLayout.LayoutParams.MATCH_PARENT, 1.0f));
        tableRow.setGravity(Gravity.CENTER_HORIZONTAL);
        table.addView(tableRow);
        for (int col = 0; col != NUM_COLS[row]; col++){ 
            final int FINAL_COL = col; 
            final int FINAL_ROW = row; 
            Button button = new Button(this); 
            button.setLayoutParams(
                    new TableRow.LayoutParams(
                            TableRow.LayoutParams.WRAP_CONTENT, 
                            TableRow.LayoutParams.WRAP_CONTENT,0f)); 
        button.setBackgroundResource(R.drawable.button);
        tableRow.addView(button); 
        buttons[row][col] = button; 
    }
}

}

答案 1 :(得分:0)

问题在于“随机”数量。您需要知道您可以拥有的最大按钮数量以及它们的图标和文本。我想到的最好的方法是在布局xml中使用其id,图标,样式和描述。

在ListAdapter onCreateView方法中,你需要有一些逻辑说,嘿,在这个项目中我需要添加按钮保存和编辑,但可能在另一行中查看,编辑和删除,例如并且您需要对这些按钮布局进行膨胀,并将它们添加到列表项布局中的容器中。

注意:如果您也支持用户可以按下列表行,则需要添加到每个按钮android:focusable="false",否则您将出现焦点问题。

下一步是实现一个包含所有可能的按钮操作的接口,每个按钮操作都会接收来自ListAdapter的条目的唯一参数(假设您的适配器从ArrayAdapter扩展,每个操作方法都会接收一个Video对象)和您的Fragment需要实现此接口,当您实例化Adapter时,您需要传递Fragment实例(您可以只使用此实例或成员实例)。

从ListAdapter的最后一步,您需要将onClickListener设置为与按钮对应的接口操作方法。您将从片段中管理已知按哪个项目的每个操作。