TableRow未显示在TableLayout中

时间:2013-08-01 14:32:32

标签: java android android-layout

任何人都可以看到下面的问题:

                if (mViewPager.getCurrentItem() == 3){
                TableLayout tbl = (TableLayout)findViewById(R.id.tblHistory);

                if (tbl.getChildCount() != mExceptions.size()){

                    for (int i = tbl.getChildCount(); i < mExceptions.size(); i++){
                        GPSException e = mExceptions.get(i);

                        //TableRow
                        TableRow tr = new TableRow(this);
                        tr.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
                        tr.setBackgroundColor(Color.BLACK);

                        //DateTime
                        TextView tx = new TextView(this);
                        tx.setLayoutParams(new android.view.ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                        tx.setText(e.DateTime);
                        tx.setTextAppearance(getApplicationContext(), android.R.attr.textAppearanceMedium);
                        tx.setTextColor(Color.BLACK);
                        tx.setBackgroundColor(Color.WHITE);
                        tr.addView(tx);

                        //Speed
                        tx = new TextView(this);
                        tx.setLayoutParams(new android.view.ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                        tx.setText(Float.toString(e.Speed));
                        tx.setTextAppearance(getApplicationContext(), android.R.attr.textAppearanceMedium);
                        tx.setTextColor(Color.BLACK);
                        tx.setBackgroundColor(Color.WHITE);
                        tr.addView(tx);

                        //Bearing
                        tx = new TextView(this);
                        tx.setLayoutParams(new android.view.ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                        tx.setText(Double.toString(e.Degrees));
                        tx.setTextAppearance(getApplicationContext(), android.R.attr.textAppearanceMedium);
                        tx.setTextColor(Color.BLACK);
                        tx.setBackgroundColor(Color.WHITE);
                        tr.addView(tx);

                        //Exceptions
                        tx = new TextView(this);
                        tx.setLayoutParams(new android.view.ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                        tx.setText(e.ExceptionString());
                        tx.setTextAppearance(getApplicationContext(), android.R.attr.textAppearanceMedium);
                        tx.setTextColor(Color.BLACK);
                        tx.setBackgroundColor(Color.WHITE);
                        tr.addView(tx);

                        tbl.addView(tr, 0);
                    }

                    tbl.invalidate();
                    tbl.refreshDrawableState();
                }
            }

我的类实现了LocationListener,并在onLocationChanged事件中触发了上面的代码。目的是为每个排队的“异常”将TableRow添加到TableLayout。每行都插入位置0。

除了正确的方法之外,我已经尝试了一切!

我的布局如下(资源暂时没有使用,但是一旦我解决了这个问题 - 对于所有你那些老鹰眼的观众来说!):

<ScrollView 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">

   <TableRow android:layout_width="match_parent" android:layout_height="wrap_content">
       <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Dt/Tm"></TextView>            
       <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Spd"></TextView>            
       <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Brg"></TextView>            
       <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ex"></TextView>            
   </TableRow>
</TableLayout>

没有抛出任何异常,如果我在for循环中举报短信,它就会出现。

如果您需要更多信息,而不是问题。

感谢。

2 个答案:

答案 0 :(得分:1)

tbl.addView(tr, 0);

我认为你需要给那个布局参数,而不是0.也许试试这个?

tbl.addView(tr, new TableLayout.LayoutParams(
                    LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));

答案 1 :(得分:0)

完成所有这些后,删除android.view.ViewGroup.LayoutParams限定符(意味着每个TextView的布局参数现在为TableRow.LayoutParams)已修复了解决方案。为什么?我不知道......

也许TextView的布局参数必须属于TableRow ???!在这刮痧。无论如何,问题解决了: - (