方向更改时Android TableLayout重复

时间:2015-07-01 07:22:46

标签: android datagrid fragment screen-orientation tablelayout

我在我的应用中使用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 类中。

到目前为止我尝试过:

  1. 为我的datagrid TableLayout,父TableLayout和ScrollView调用invalidate()和requestLayout()方法。
  2. 尝试了解有多少TableLayouts或ScrollView被重复使用。根据我的测试代码,结果 none
  3. 在xml中添加行并忽略fillDataGrid()函数,但没有解决问题。虽然行在xml中添加/操作
  4. 我学到了什么:

    • 这不是渲染问题。因为当我调用android.app.Fragment时,我仍然可以滚动重复的 TableLayout。

    您可以看到描述以下情况的屏幕截图。

    谢谢。

    Normal Table Layout

    Error occured

2 个答案:

答案 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对象是什么?也许这是你的构造中的缺陷