表行是表中的一行,其中对象从左到右排列在相同的高度。 HTML和几个GUI支持这个概念。
为什么在TableLayout中动态添加的TableRow在Android Kotlin中无法访问?
我有一个空的TableLayout,其标题在activity_main.xml中,如下所示 我有一个空的 TableLayout,其标题位于 Activity_main.xml 中,如下 <TableLayout android:id="@+id/sensorTable" android:layout_width="0dp" android:layout_height="0dp" android:scrollbarAlwaysDrawVerticalTrack="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/lineChart"> <TableRow> <TextView android:layout_width="75dp" android:layout_column="0" android:layout_weight="1" android:text="Id" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_width="75dp" android:layout_column="0" android:layout_weight="1" android:text="Sensor" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_width="75dp" android:layout_column="1" android:layout_weight="1" android:text="Reading" android:textSize="20sp" android:textStyle="bold"></TextView> </TableRow> </TableLayout> 然后,我以编程方式在 MainActivity.kt 中添加表行,如下所示。 val stableLayout = findViewById<TableLayout>(R.id.sensorTable) var scout: Int = 0 while (scout<ccsen1.count()){ val tableRow = LayoutInflater.from(this).inflate(R.layout.table_item, null, false) val idauto = tableRow.findViewById<View>(R.id.idautoint) as TextView val Sensor = tableRow.findViewById<View>(R.id.sensor) as TextView val Reading = tableRow.findViewById<View>(R.id.reading) as TextView idauto.setText((ccsen1.elementAt(scout)).sidauto) Sensor.setText((ccsen1.elementAt(scout)).sname) Reading.setText((ccsen1.elementAt(scout)).sreading) stableLayout.addView(tableRow) scout++ } 然后,我尝试在另一个函数中按如下方式访问表行,但应用程序崩溃了。它仅显示在 XML 文件中定义的 TableLayout 的标题,如上所示(id、传感器、读数)。一旦 while 循环递增到下一个表行,应用程序就会崩溃,就好像没有更多的表行可找到一样。但是,stableLayout.childCount 返回 3 行。因此,val t = stableLayout.getChildAt(index:1) as TableRow 失败并使应用程序崩溃。 val RowCount = stableLayout.childCount var scout3: Int = 0 while (scout3<RowCount) { val t = stableLayout.getChildAt(scout3) as TableRow //TextView firstTextView = (TextView) t.getChildAt(0); val firstTextView = t.getChildAt(0) as TextView //TextView secondTextView = (TextView) t.getChildAt(1); val secondTextView = t.getChildAt(1) as TextView //TextView secondTextView = (TextView) t.getChildAt(2); val thirdTextView = t.getChildAt(2) as TextView //String firstText = firstTextView.getText().toString(); val firstText = firstTextView.text.toString() //String secondText = secondTextView.getText().toString(); val secondText = secondTextView.text.toString() //String secondText = secondTextView.getText().toString(); val thirdText = thirdTextView.text.toString() Toast.makeText(this@MainActivity, "$firstText-$secondText-$thirdText", Toast.LENGTH_SHORT).show() scout3++ } 这是为什么?我该如何解决这个问题?我是不是错过了什么? 2024-12-18 13:19:58.221 7183-7183/com.example.installedapps E/e.installedapp: Attempt to load writable dex file: /data/data/com.example.installedapps/code_cache/.overlay/base.apk/classes3.dex 2024-12-18 13:19:58.558 7183-7217/com.example.installedapps E/QT: [QT]file does not exist 2024-12-18 13:19:59.478 7183-7222/com.example.installedapps E/ion: ioctl c0044901 failed with code -1: Invalid argument 2024-12-18 13:20:17.902 7183-7183/com.example.installedapps E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.installedapps, PID: 7183 java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.TableRow at com.example.installedapps.MainActivity.createButtonDynamically$lambda-4(MainActivity.kt:173) at com.example.installedapps.MainActivity.$r8$lambda$WmSUg8-J-d8vkkGFbIzKlnN5bls(Unknown Source:0) at com.example.installedapps.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2) at android.view.View.performClick(View.java:7792) at android.widget.TextView.performClick(TextView.java:16112) at android.view.View.performClickInternal(View.java:7769) at android.view.View.access$3800(View.java:910) at android.view.View$PerformClick.run(View.java:30218) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8751) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) 您不应该使用 LinearLayout 或 ConstraintLayout,table_item.xml 中的顶部元素应该是 TableRow。 LinearLayout 可以像 TableRow 扩展 LinearLayout 一样工作,但是表格列对齐和调整大小功能将不起作用。 但是当您将 layout_width 硬编码为固定值时,它看起来会对齐(直到一列占用超过 75dp) 如果你查看 TableRow 的文档,它会说 TableRow 的子级不需要在 XML 文件中指定layout_width 和layout_height 属性。 TableRow 始终强制这些值分别为 ViewGroup.LayoutParams.MATCH_PARENT 和 ViewGroup.LayoutParams.WRAP_CONTENT 当您固定 TextView 的宽度时,您也可以先使用垂直布局,然后再使用水平布局,而不需要额外的 TableLayout 成本。 要正确使用TableLayout activity_main.xml应该是 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TableLayout android:id="@+id/sensorTable" android:layout_width="0dp" android:layout_height="0dp" android:scrollbarAlwaysDrawVerticalTrack="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/lineChart"> <TableRow> <TextView android:layout_column="0" android:layout_weight="1" android:text="Id" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_column="0" android:layout_weight="1" android:text="Sensor" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_column="1" android:layout_weight="1" android:text="Reading" android:textSize="20sp" android:textStyle="bold"/> </TableRow> </TableLayout> </androidx.constraintlayout.widget.ConstraintLayout> 和table_item.xml <TableRow> <TextView android:layout_column="0" android:layout_weight="1" android:textSize="20sp" /> <TextView android:layout_column="0" android:layout_weight="1" android:textSize="20sp" /> <TextView android:layout_column="1" android:layout_weight="1" android:textSize="20sp" /> </TableRow> 这将允许 TableLayout 的主要功能(根据列的最大宽度自动对齐列)发挥作用。 你现在的方式TableLayout只是充当另一个浪费的LinearLayout
如果您无法将 tablelayout 子项转换为 TableRow,那么如何访问表行及其列。我有一个表格布局,并且表格行是在 onCreate 中以编程方式添加的。每次...
无法访问tablelayout布局中的隐藏表格列:Android Kotlin
我动态创建 TableLayout 及其行。另外,我在表中有一个隐藏列。每次我尝试访问隐藏列的值时,我就是找不到它,即使它应该......
我有一个包含 3 个 tr 的字符串变量: $string = ' 总计 1 779,00 总计 2 867,25 我有一个包含 3 个 tr 的字符串变量: $string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>'; 我尝试拆分字符串以获得 3 个<tr>...</tr>标签。 我已经尝试过: $match = preg_split('[(<tr[^>]*>.*?</tr>)]', $string , NULL, PREG_SPLIT_DELIM_CAPTURE); 但我没有得到好的结果。 尝试 $string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>'; $result = array_filter(explode('</tr>', str_replace('<tr>','',$string))); print_r($result); 希望有帮助:) 我不建议使用正则表达式来解析你的 HTML,但如果你想这样做,这里是正确的方法: $regexPattern = "/<tr>(.*?)<\\/tr>/"; $string = "<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>"; preg_match_all($regexPattern , $string , $matches); 根据要求,这是包含标签的正则表达式: $regexPattern = "/(<tr>.*?<\\/tr>)/"; 祝你好运。 尝试匹配这三个trs preg_match_all('/<tr[^>]*>.*?<\/tr>/', $string , $match); var_dump($match); 输出: array(1) { [0]=> array(3) { [0]=> string(42) "<tr><td> Total 1 </td><td>779,00</td></tr>" [1]=> string(42) "<tr><td> Total 2 </td><td>867,25</td></tr>" [2]=> string(42) "<tr><td> Total 3 </td><td>939,00</td></tr>" } } 你所做的很好,只需使用 PHP 的 array_filter 方法过滤掉空结果 即 <?php $string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>'; $match = array_filter(preg_split('[(<tr[^>]*>.*?</tr>)]', $string , -1, PREG_SPLIT_DELIM_CAPTURE)); print_r($match); 结果: Array ( [1] => <tr><td> Total 1 </td><td>779,00</td></tr> [3] => <tr><td> Total 2 </td><td>867,25</td></tr> [5] => <tr><td> Total 3 </td><td>939,00</td></tr> )
我需要将每个表行(表1)的详细信息导出为pdf,为每个导出的行设置表1[学生ID]列中的文件名。 理想的做法是从...中排除行中的空白单元格
我有一个在表视图内生成按钮的应用程序,如下所示: TableLayout 表 = (TableLayout) findViewById( R.id.tableLayout1 ); for(int i = 0 ; i < Gatorade.getVariant().
我发现SwiftUI 3.0新增的表格组件就像一个玩具,可以轻松使用,但很难扩展更多功能。 TableRow 和 TableColumn 继承自 value 对象。嗬...
在使用tablesorter的html表格中,一行如何根据其单元格的内容具有背景颜色?
我正在使用 jQuery Mottie 表排序器显示一个 HTML 表格。我希望其中一列中带有“v”的行使用某种(给定的)背景颜色进行格式化,这是 ret...
PostgreSQL v8.2(Greenplum) 创建或替换函数 util.retrec(OUT p1 date, OUT p2 boolean) 退货记录 作为 $身体$ 宣布 开始 p1 := 当前日期; p2 := 真; 返回; 结尾; $身体$ 语言
当我在 td 中写一些东西并按 Enter 键时,我会得到一个新行。在控制台中,我得到了我写的所有内容 + br 标签。我该如何修复它? document.querySelector(".add_btn").addEventList...
Android imageview 未显示在 TableRow 中
我试图在 TableRow 中显示一个简单的 ImageView,但由于某种原因它不会显示。如果我将另一个控件添加到另一行,imageView 会显示,所以看起来它不适合......
SEO - 带链接的表格 - 使用 <a>锚文本</a> 或将整行包裹在 <a> 标签中更好?
我有一张待售房屋表 - 详细说明地址、价格、大小、建造年份、能源等级。 对于移动可用性,我将整行作为链接 - 即用户可以点击任何地方...
无法完全覆盖 MUI TableCell 中的顶部和底部填充以使整个单元格内容可点击
我正在尝试使我的表格单元格的全部内容可点击(用于路由到我应用程序中的其他地方;路由工作正常)。 我已经成功地删除了无法点击的水平空间......
我创建了一个表格布局,其中的标题行添加到了XML文件中,其余的内容行被动态填充。由于某种原因,最后一行不可见。我浏览了其他...
我是新来的人。我想根据某些条件更改表行。就像我有一个名为deadLine的值。因此,如果DeadLine日期与当前日期之间的差为2,则表行...
我想合并位于同一行并在其中具有相同文本值的单元格。我在这里发现了许多类似的问题,但所有问题都与另一行中的单元格合并。这个...
我想将我的Combobox项设置为使用JDBC以单个字符串的形式从数据库表的行中获取数据。在我的数据库表上,有三列,但每一行都与我的组合框的每一项匹配。
我有一个图库,其中包含39张图片。前两个按钮,下一个按钮,中间两个按钮。图片在表格内,并显示6张图片。当用户按下下一步按钮6时...
我已经在Android中创建了一个电子表格,以显示使用TableRow进行数据搜索的结果。 TableRows是动态创建的,因此一次最多可以显示30行。我正在尝试...