Android编程新手。
我有一个布局XML,我想要添加一个列表(包含数据库中的项目),格式化为表格。
以下是代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_cat);
DatabaseHandler db = new DatabaseHandler(this);
List<Category> allCategories = db.getAllCategories();
//Get the main layout from XML
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.edit_cat);
//Create table layout for the categories
TableLayout catList = new TableLayout(this);
//Iterate the categories, and organize in tables
for (Category category : allCategories) {
TableRow tr = new TableRow(this);
//Display category name
TextView name = new TextView(this);
name.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
name.setText(category.getName());
//Display category type
TextView type = new TextView(this);
type.setText(category.getType());
type.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
//Display edit button
Button btnEdit = new Button(this);
btnEdit.setText(getResources().getString(R.string.edit));
btnEdit.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
//Display delete button
Button btnDelete = new Button(this);
btnDelete.setText(getResources().getString(R.string.delete));
btnDelete.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
tr.addView(name);
tr.addView(type);
tr.addView(btnEdit);
tr.addView(btnDelete);
catList.addView(tr, new TableLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
}
mainLayout.addView(catList);
}
这不会给布局添加任何内容。任何想法为什么这不起作用?
编辑:在这里添加了xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/edit_cat"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView style="@style/pageHeader"
android:text="@string/catEditor"/>
<Button
android:id="@+id/btnNewCategory"
android:text="@string/newCategory"
android:textSize="11pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="onBtnClicked"/>
<Button
android:id="@+id/back"
android:text="@string/back"
android:textSize="11pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="onBtnClicked"/>
</LinearLayout>
答案 0 :(得分:4)
好的,我想我有一个答案。
在指定LayoutParams时需要更具体。虽然它不会抛出编译异常,但如果没有指定LayoutParams的正确父类,则不会显示任何内容。
指定布局参数时,需要使用对象所在容器的类。如果您要设置在LinearLayout内部的textview的布局参数,那么如果您要创建一个textview进入TableRow,则可以使用new LinearLayout.LayoutParams(...)
,您需要使用TableRow.LayoutParams(...)
下面是完整的代码,稍加修改,因为我没有数据库设置。
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.edit_cat);
//Create table layout for the categories
TableLayout catList = new TableLayout(this);
//Set the table layout to Match parent for both width and height
// Note: We use LinearLayout.LayoutParams because the TableLayout is going inside a LinearLayout
catList.setLayoutParams(
new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
//Iterate the categories, and organize in tables
for(int i = 0; i < 5; i++)
{
TableRow tr = new TableRow(this);
/* Since the table row is going inside a table layout, we specify the parameters using TableLayout.LayoutParams */
tr.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
//Display category name
TextView name = new TextView(this);
/* Since the TextView is going inside a TableRow, we use new TableRow.LayoutParams ... */
name.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
name.setText("Test Row - " + i);
name.setBackgroundColor(Color.RED);
//Display category type
TextView type = new TextView(this);
type.setText("Type Row - " + i);
type.setBackgroundColor(Color.GREEN);
type.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
//Display edit button
Button btnEdit = new Button(this);
btnEdit.setText("Edit");
btnEdit.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
//Display delete button
Button btnDelete = new Button(this);
btnDelete.setText("Delete");
btnDelete.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
tr.addView(name);
tr.addView(type);
tr.addView(btnEdit);
tr.addView(btnDelete);
catList.addView(tr);
}
mainLayout.addView(catList);