Проблема при перемещении TableRow в TableLayout - PullRequest
0 голосов
/ 25 июля 2011

Я пытаюсь двинхронно перемещать несколько строк одновременно в определенном представлении на основе пользовательского ввода.

Сценарий использования заключается в том, что пользователь выбирает параметр, и в зависимости от параметра отображаются определенные строки/ 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);

Здесь ломаются две вещи:

  • Код отключения не выполняется (выполняется ли этот код до или после кода включения / отключения, указанного выше)
  • Все строки в моем макете облажались.

Итак, как мне динамически перемещать строки, при этом правильно скрывая / показывая / включая / отключая различные строки?

1 Ответ

0 голосов
/ 26 июля 2011

После долгих проб и ошибок я наконец-то нашел единственный способ сделать это с хорошими результатами:

Мне пришлось настроить способ обновления пользовательского интерфейса на 3 этапа: - Обновите значения для входов (принудительно форматирует, пересчитывает и т. Д.) - изменить расположение строк - Включить / отключить различные входы в зависимости от выбора

Гайки и болты в том, что каждый раз, когда меняется goalTarget, я должен удалить все TableRow s из TableLayout и добавить

возвращает их в правильном порядке, с соответствующими номерами строк как часть вызова addView().

Это определенно не самый красивый способ, которым я мог видеть, как это делается, но, очевидно, TableLayout не нравится, что вы просто пытаетесь

чтобы перемещать вещи по одному за раз.

...