我在我的应用中使用TableLayout作为一个简单的DataGrid。行添加在代码中。问题是;当我更改屏幕方向时,旧表格布局会出现。
布局文件:
$contents = $em->getRepository('MyAppBundle:Content')
->createQueryBuilder('c')
->select('c.id, c.title, c.sequence, c.sequence_count, c.category_sequence, c.unique_id, c.priority, c.status')
->addSelect('o.slug as owner')
->addSelect('cat.slug as category')
->addSelect("group_concat(m.name SEPARATOR ',') AS media")
->addSelect("group_concat(a.name SEPARATOR ',') AS album")
->innerJoin('c.content_owner', 'o')
->innerJoin('c.category', 'cat')
->leftJoin('c.media', 'm')
->leftJoin('c.albums', 'a')
->groupBy('c.id')
->getQuery()
->getArrayResult();
调用函数创建测试条目。我是从我片段的.
.
.
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scrollView"
android:fillViewport="false"
>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/dataGrid"
android:divider="?android:attr/dividerHorizontal"
android:showDividers="middle|end">
</TableLayout>
</ScrollView>
</TableLayout>
调用的。
public View onCreateView
我知道private void fillDataGrid(TableLayout dataGrid,Context context)
{
int columnCount = 5;
int rowCount = 30;
List<TextView> fields = new ArrayList<>();
TableRow row;
dataGrid.removeAllViews();
dataGrid.invalidate();
dataGrid.setStretchAllColumns(true);
for (int j=0;j<rowCount;j++)
{
row = new TableRow(context);
if (j%2 != 0)
row.setBackgroundColor(getResources().
getColor(R.color.highlighted_text_material_light));
for (int i = 0; i < columnCount; i++)
{
TextView field;
field = new TextView(context);
field.setText("field " + i);
fields.add(field);
row.addView(field);
}
dataGrid.addView(row);
}
}
的冗余。我保留以后再使用。
sdk版本:
List<TextView> fields = new ArrayList<>();
错误发生在 minSdkVersion 14
targetSdkVersion 22
类中。
到目前为止我尝试过:
我学到了什么:
android.app.Fragment
时,我仍然可以滚动重复的 TableLayout。您可以看到描述以下情况的屏幕截图。
谢谢。
答案 0 :(得分:1)
我发现了这个问题。我正在使用,
getFragmentManager().beginTransaction()
.add(R.id.mainContainer, fragMain.newInstance("",""))
.commit();
将我的第一个片段附加到&#39; onCreate()&#39;中的主要活动方法。由于&#39; onCreate()&#39;在方向更改时调用,片段被多次添加。正确的代码是:
getFragmentManager().beginTransaction()
.replace(R.id.mainContainer, fragMain.newInstance("",""))
.commit();
谢谢。
答案 1 :(得分:0)
我假设你有一个内存泄漏...代码中的任何地方都有一个强大的引用,可以防止视图被垃圾收集......
您在Fragment中为fillDataGrid()提供的dataGrid对象是什么?也许这是你的构造中的缺陷