我想在每行中添加不同数量的按钮。在每行中说一个随机数量的按钮。行数是一个常量定义。我看过一些教程,到目前为止还有以下代码。这会在每行中生成相同数量的按钮。你能帮忙吗?谢谢。
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;
}
}
}
答案 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设置为与按钮对应的接口操作方法。您将从片段中管理已知按哪个项目的每个操作。