Я пытаюсь двинхронно перемещать несколько строк одновременно в определенном представлении на основе пользовательского ввода.
Сценарий использования заключается в том, что пользователь выбирает параметр, и в зависимости от параметра отображаются определенные строки/ hidden и строки должны быть переупорядочены, чтобы иметь смысл для пользователя.
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);
Здесь ломаются две вещи:
- Код отключения не выполняется (выполняется ли этот код до или после кода включения / отключения, указанного выше)
- Все строки в моем макете облажались.
Итак, как мне динамически перемещать строки, при этом правильно скрывая / показывая / включая / отключая различные строки?