Android 在TableLayout中移动TableRow时出现问题
我试图根据用户输入在特定视图中同时动态移动几行 用例是用户选择一个选项,并基于该选项,显示/隐藏某些行,并且需要重新排列这些行,以便用户理解Android 在TableLayout中移动TableRow时出现问题,android,android-layout,tablelayout,Android,Android Layout,Tablelayout,我试图根据用户输入在特定视图中同时动态移动几行 用例是用户选择一个选项,并基于该选项,显示/隐藏某些行,并且需要重新排列这些行,以便用户理解 TableLayout在XML中实例化,但是TableRow及其布局在代码中实例化。我尝试了几种不同的方法,取得了不同程度的成功 用于正确隐藏/禁用的代码: private void updateTimeRow(TargetType goalTarget) { TableRow timeRow = (TableRow)this.findViewBy
TableLayout
在XML
中实例化,但是TableRow
及其布局在代码中实例化。我尝试了几种不同的方法,取得了不同程度的成功
用于正确隐藏/禁用的代码:
private void updateTimeRow(TargetType goalTarget)
{
TableRow timeRow = (TableRow)this.findViewById(timeId + 100);
EditText timeText = (EditText)this.findViewById(timeId);
if (goalTarget == TargetType.daysRowedWeek
|| goalTarget == TargetType.metersDay
|| goalTarget == TargetType.metersSeason
|| goalTarget == TargetType.metersWeek)
{
timeRow.setVisibility(View.GONE);
timeRow.setEnabled(false);
timeText.setEnabled(false);
}
else if (goalTarget == TargetType.splitForDistance
|| goalTarget == TargetType.unknown)
{
setTimeText(currentTarget.recalcTime().toString());
timeRow.setVisibility(View.VISIBLE);
timeRow.setEnabled(false);
timeText.setEnabled(false);
}
else
{
timeRow.setVisibility(View.VISIBLE);
timeRow.setEnabled(true);
timeText.setEnabled(true);
}
}
根据这里回答的问题,我尝试删除/重新添加行,代码如下:
int rowNum = -1;
tableLayout.removeView(timeRow);
switch (goalTarget)
{
case unknown:
case timeForDistance:
rowNum = 2;
break;
case splitForDistance:
rowNum = 4;
break;
case splitForTime:
rowNum = 3;
break;
}
tableLayout.addView(timeRow, rowNum);
这里有两个问题:
- 禁用代码失败(该代码是否在上述启用/禁用代码之前或之后运行
- 我布局中的行都搞砸了
那么,如何在正确隐藏/显示/启用/禁用不同行的同时动态移动行?经过大量令人沮丧的尝试和错误后,我终于找到了实现这一点的唯一方法,并获得了可靠的结果: 我必须调整我的UI更新方式,将其分为三个步骤: -更新输入值(强制格式化、重新计算等) -重新布置行 -根据选择启用/禁用不同的输入 螺母和螺栓是,每当
目标更改时,我必须从表格布局中删除所有表格行
并添加
将它们按正确的顺序返回,并将适当的行号作为addView()
调用的一部分
这绝对不是我所能看到的最漂亮的方式,但显然表格布局不喜欢你只是尝试一下
一次移动一个物体