在tablerow中添加视图元素

时间:2016-01-27 09:26:26

标签: android tablelayout android-tablelayout

我有一个屏幕,在xml中定义了一个带有三个拉伸列的tablelayout。现在在我的代码中,我根据运行时获取的一些后端数据填充tablelayout中的表行。 现在我想创建一个动作,通过单击任何一个tablerow,通过展开表格行显示一些细节数据。再次单击tabelrow,数据应该折叠。 我尝试过使用下面的代码,但是它不起作用,我没有在点击后显示/展开的tablerow详细信息数据。任何帮助将不胜感激。

下面的main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.bfp.quiztemplate.ScoresActivity" >

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/button1"
    android:layout_below="@+id/quizSpinner" >

    <TableLayout
        android:id="@+id/displayScoresTable"
        android:layout_width="fill_parent"
        android:stretchColumns="0,1,2"
        android:layout_weight="1"
        android:layout_height="wrap_content">

    </TableLayout>

   </ScrollView>

我的活动课程

      TableLayout  tl = (TableLayout) findViewById(R.id.displayScoresTable);
        for (int i = 0; i<dataArray.length; i++){
             TableRow tr = new TableRow(this);
             tr.setBackgroundResource(R.drawable.cell_shape_scores);
             tr.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

                //add more view elelemtns inside tablerow
            TextView myText = new TextView(this);
            myText.setText ("test");
            LayoutParams textViewLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                myText .setLayoutParams(textViewLayoutParams);
                tr.addView(myText );

             //now the code for expand/collpase logic

             tr.setTag(rowCount);
             tr.setId(rowCount);
                 tr.setOnClickListener(new View.OnClickListener(){
                 public void onClick(View v) {
                   rowCount = (Integer) v.getTag();
                   TextView tv1 = new TextView(ScoresActivity.this);
                   TextView tv2=new TextView(ScoresActivity.this);
                   TableRow.LayoutParams trparams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
                   tv1.setLayoutParams(trparams);
                   tv2.setLayoutParams(trparams);
                   tv1.setText("Hello1!");
                   tv2.setText("Hello2!");
                   TableRow trow = new TableRow(ScoresActivity.this);
                   trow.setLayoutParams(trparams);
                   trow.addView(tv1);
                   trow.addView(tv2);
                   TableRow currentRow = (TableRow)findViewById(rowCount);
                   currentRow .addView(trow);
              }});

      tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
}

1 个答案:

答案 0 :(得分:0)

我最终能够通过使用tablelayout的addview(tablerow,index)属性来解决。为了扩展我必须在tat位置添加这么多行并将它们移除以便折叠。